Как я могу найти плохо работающий запрос в SQL Server? - PullRequest
3 голосов
/ 04 октября 2011

Симптом заключается в том, что наш сервер базы данных иногда выдает исключения тайм-аута, когда он выполняет хранимую процедуру, которая выбирает данные из определенной таблицы.Он делал это примерно раз в неделю.Мы перезапускаем базу данных, и кажется, что все работает нормально.Иногда он восстанавливается сам по себе, если мы просто подождем несколько минут.

Это начало происходить после того, как мы изменили кластеризованный индекс для рассматриваемой таблицы, которая представляет собой большую (900 тыс. Строк) часто запрашиваемую таблицу.

Нам, очевидно, нужно это смягчить, но мы не можем найти сценарий, в котором сервер базы данных начинает время ожидания.Я изучил таблицу sys.dm_exec_query_stats, но я не могу найти конкретную хранимую процедуру, которая вызывает проблему, тем более, что значения, передаваемые этой хранимой процедуре, которые вызывают низкую производительность.

Есть ликакая-то более детальная регистрация в SQL-сервере, которую я могу использовать, чтобы найти конкретный запрос или хранимую процедуру, вызывающую низкую производительность?Затем, когда я нахожу это, есть ли способ увидеть значения, переданные этой хранимой процедуре или запросу в параметрах?

Ответы [ 3 ]

3 голосов
/ 04 октября 2011

Одна из возможностей - использовать SQL Profiler (или какой-либо подобный инструмент), чтобы указать на медленные и сосредоточить свои усилия там.

0 голосов
/ 04 октября 2011

Похоже, что это может быть множество вещей.Например, у вас может быть недостаточно индексов в таблице.Что говорит план выполнения?Есть ли сканирование таблицы?

Если время запроса сдвигается, это звучит как устаревшая статистика.Попробуйте обновить статистику и посмотрите, поможет ли это.

Кроме того, просто примечание.Если вам не нужен тайм-аут для вашего объекта SqlCommand, установите CommandTimeout на ноль.

0 голосов
/ 04 октября 2011

Наши администраторы баз данных используют подход, который эффективно включает в себя задание агента SQL, выполняющее хранимую процедуру (каждые 20 секунд или около того), которое регистрирует вывод вызова в sp_WhoIsActive в таблицу , sp_WhoIsActive может выводить все виды полезной информации о текущих активных запросах, включая время выполнения и план выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...