Для некоторых пользователей запрос медленный

У меня есть несколько запросов, вызываемых из веб-приложения C # .NET, которые всегда бывают для меня (я локальный администратор на SQL Server), но для группы пользователей (группа доменов с требуемыми разрешениями) запрос невероятно медленно до такой степени, что это время в приложении.

Что может привести к тому, что один и тот же запрос будет работать по-разному для разных пользователей?

Дополнительная информация:

  • Запрос является встроенным SQL в коде C #, а не хранимой процедурой
  • Приложение использует проверку подлинности домена, и как пользователь, так и я запускаем запрос через приложение
  • Кажется, что проблема заключается в разных планах, и один был кэширован, поэтому он был другим для разных пользователей. Что-то влияет на кеш, потому что теперь запрос медленный для меня через приложение и быстро в SQL Server Management Studio.
11 голосов | спросил Supergibbs 9 FebruaryEurope/MoscowbSat, 09 Feb 2013 02:08:48 +0400000000amSat, 09 Feb 2013 02:08:48 +040013 2013, 02:08:48

4 ответа


5

Если параметры одинаковые (я предполагаю, что это означает exact same query), это не должно быть snuffing параметров ( пользователи получают плохой план для неправильных параметров), но у пользователей разные планы по тем же параметрам (-ам). Это может быть из-за настроек, таких как quoted_identifier и arithabort, который вы можете сравнить в sys.dm_exec_sessions для быстрого пользователя и медленного пользователя, или это может быть потому, что они имеют разные схемы по умолчанию и объекты ссылаются без префикса схемы. Параметр sniffing все еще может быть задействован (следовательно, почему у одного из них есть плохой план).

ответил Aaron Bertrand 22 52013vEurope/Moscow11bEurope/MoscowFri, 22 Nov 2013 00:31:51 +0400 2013, 00:31:51
3

Я видел две причины для этого: 1, параметр sniffing 2, настройки подключения разные. Если вы запустите whoisactive , он покажет вам различные свойства соединения. На самом деле у меня есть запись в блоге, но я не очистил от нее конкретную информацию о компании. (и я еще не включил свой блог);)

ответил rottengeek 27 MarpmWed, 27 Mar 2013 20:32:32 +04002013-03-27T20:32:32+04:0008 2013, 20:32:32
0

Попробуйте: укажите схему для каждой ссылки EXEC и таблицы. Например, EXEC dbo.MyProc

Могут быть конфликты (как предполагает Мартин Смит - «та же схема по умолчанию»?) или перекомпилирует

ответил Kip Bryan 16 AMpTue, 16 Apr 2013 04:21:38 +040021Tuesday 2013, 04:21:38
0

Это, похоже, ошибка в SQL Server. Я испытываю эту ошибку с SQL Server 2008. Я не тестировал новые версии. Я могу войти в систему как администратор и запустить этот запрос и получить ответ за 0 секунд:

select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME

Затем я регистрируюсь как пользователь с меньшим количеством разрешений, запускаю тот же самый запрос и ответ занимает 45 секунд.

Это повторяется снова и снова. Если я подпрыгиваю назад и вперед между двумя моими окнами запросов, один для администратора и один для не-admin, не-admin всегда занимает около 45 секунд, а администратор занимает 0 секунд.

ответил Rob Kraft 3 J000000Tuesday18 2018, 17:58:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132