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

11

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

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

Больше информации:

  • Запрос является встроенным SQL в коде C #, а не хранимой процедурой.
  • Приложение использует аутентификацию домена, и пользователь и я запускаем запрос через приложение
  • Похоже, проблема в разных планах, и один из них был кэширован, поэтому он был разным для разных пользователей. Что-то влияет на кеш, потому что теперь запрос для меня медленный через приложение и быстрый в SQL Server Management Studio.
Supergibbs
источник
2
Проверьте следующие вопросы . Вы можете обнаружить, что находитесь в такой же ситуации. Допустим, сначала попробуйте этот и этот другой .
Marian
3
Каковы типы ожидания (sys.dm_os_waiting_tasks) для медленного запроса (-ов), а также каковы фактические планы выполнения каждого (ваш быстрый, их медленный)?
Томас Стрингер
2
Согласитесь с предыдущими комментариями. Моей первой мыслью будет также анализ параметров. Проверка, чтобы видеть, отличаются ли планы, должна быть первым шагом.
Мартин Смит
4
Если параметры одинаковы (я предполагаю, что это означает exact same query), это не должно быть отслеживание параметров (пользователи получают неверный план для неправильных параметров), а пользователи получают разные планы для одного и того же параметра (с). Это может быть связано с такими настройками, как quoted_identifierи arithabort, которые можно сравнивать sys.dm_exec_sessionsдля быстрого и медленного пользователей, или из-за того, что у них разные схемы по умолчанию, и на объекты ссылаются без префикса схемы. Возможно, все еще задействован анализ параметров (поэтому у одного из них плохой план).
Аарон Бертран
1
RE: У вас есть такая же схема по умолчанию, как и у других пользователей? Вы уже записали планы выполнения для медленных и быстрых запусков?
Мартин Смит

Ответы:

5

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

Аарон Бертран
источник
3

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

rottengeek
источник
0

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

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

Кип Брайан
источник
0

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

select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME

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

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

Роб Крафт
источник
Как было задано в комментариях к вопросу - есть ли у обоих пользователей одна и та же база данных по умолчанию и выполняются ли запросы в одной базе данных? И, вы можете указать на какую-то документацию, в которой говорится, что это ошибка, или это ваше мнение? Не сказать, что ты не прав, просто искать что-то помимо анекдота.
RDFozz
Проблема, которую вы определили в своем ответе, по-видимому, не повторяется в SQL Server 2008. select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAMEпоследовательно возвращает данные немедленно для входа в систему не-SA, у которого вообще нет прав на предоставление расширений.
Макс Вернон