У меня есть пара запросов, вызванных из веб-приложения C # .NET, которые всегда бывают быстрыми для меня (я являюсь локальным администратором на SQL Server), но для группы пользователей (группа домена с необходимыми разрешениями) запрос невероятно медленный Дело в том, что время ожидания в приложении.
Что может привести к тому, что один и тот же запрос будет выполняться по-разному для разных пользователей?
Больше информации:
- Запрос является встроенным SQL в коде C #, а не хранимой процедурой.
- Приложение использует аутентификацию домена, и пользователь и я запускаем запрос через приложение
- Похоже, проблема в разных планах, и один из них был кэширован, поэтому он был разным для разных пользователей. Что-то влияет на кеш, потому что теперь запрос для меня медленный через приложение и быстрый в SQL Server Management Studio.
sql-server
sql-server-2008
performance
t-sql
Supergibbs
источник
источник
exact same query
), это не должно быть отслеживание параметров (пользователи получают неверный план для неправильных параметров), а пользователи получают разные планы для одного и того же параметра (с). Это может быть связано с такими настройками, какquoted_identifier
иarithabort
, которые можно сравниватьsys.dm_exec_sessions
для быстрого и медленного пользователей, или из-за того, что у них разные схемы по умолчанию, и на объекты ссылаются без префикса схемы. Возможно, все еще задействован анализ параметров (поэтому у одного из них плохой план).Ответы:
Если параметры одинаковы (я предполагаю, что это означает
exact same query
), это не должно быть отслеживание параметров (пользователи получают неверный план для неправильных параметров), а пользователи получают разные планы для одного и того же параметра (с). Это может быть связано с такими настройками, какquoted_identifier
иarithabort
, которые можно сравниватьsys.dm_exec_sessions
для быстрого и медленного пользователей, или из-за того, что у них разные схемы по умолчанию, и на объекты ссылаются без префикса схемы. Возможно, все еще задействован анализ параметров (поэтому у одного из них плохой план).источник
Я видел две причины для этого: 1, сниффинг параметров 2, настройки соединения разные. Если вы запустите whoisactive , он покажет вам различные свойства подключения. На самом деле у меня есть запись в блоге по этому вопросу, но я не очистил информацию, специфичную для компании. (я еще не включил свой блог);)
источник
Попробуйте: Укажите схему для каждого EXEC и ссылки на таблицу. Например, EXEC dbo.MyProc
Могут быть конфликты (как предлагает Мартин Смит - «та же схема по умолчанию»?) Или перекомпиляция
источник
Это похоже на ошибку в SQL Server. Я столкнулся с этой ошибкой в SQL Server 2008. Я не тестировал новые версии. Я могу войти в систему как администратор и выполнить этот запрос и получить ответ в течение 0 секунд:
Затем я вхожу в систему как пользователь с меньшими правами доступа, выполняю точно такой же запрос, и ответ занимает 45 секунд.
Это последовательно снова и снова. Если я отскакиваю назад и вперед между двумя окнами запросов, одним для администратора и одним для не-администратора, не-администратор всегда занимает около 45 секунд, а администратор - 0 секунд.
источник
select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME
последовательно возвращает данные немедленно для входа в систему не-SA, у которого вообще нет прав на предоставление расширений.