Как я могу войти и найти самые дорогие запросы? - PullRequest
64 голосов
/ 03 ноября 2008

Монитор активности в sql2k8 позволяет нам видеть самые дорогие запросы. Хорошо, это круто, но есть ли способ, как я могу войти в эту информацию или получить эту информацию через анализатор запросов? Я действительно не хочу, чтобы была открыта консоль управления Sql, и я смотрю на панель мониторинга активности.

Я хочу выяснить, какие запросы плохо написаны / схема плохо спроектирована и т. Д.

Спасибо огромное за любую помощь!

Ответы [ 6 ]

64 голосов
/ 03 ноября 2008
  1. Используйте SQL Server Profiler (в меню инструментов в SSMS), чтобы создать трассировку, которая регистрирует эти события:

     RPC:Completed
     SP:Completed
     SP:StmtCompleted
     SQL:BatchCompleted
     SQL:StmtCompleted
    
  2. Вы можете начать со стандартного шаблона трассировки и удалить его. Вы не указали, было ли это для конкретной базы данных или для всего сервера, если это для конкретных БД, включите столбец DatabaseID и установите фильтр для вашей БД (SELECT DB_ID('dbname')). Убедитесь, что логический столбец данных Reads включен для каждого события. Установите трассировку для входа в файл. Если вы оставляете эту трассировку для выполнения в фоновом режиме без присмотра, рекомендуется установить максимальный размер файла трассировки, например, 500 МБ или 1 ГБ, если у вас достаточно места (все зависит от того, насколько активно сервер работает, поэтому тебе придется пососать и посмотреть).

  3. Кратко запустите трассировку, а затем приостановите ее. Перейдите в Файл-> Экспорт-> Определение трассировки скрипта и выберите версию своей БД и сохраните в файл. Теперь у вас есть сценарий sql, который создает трассировку с гораздо меньшими издержками, чем при работе через графический интерфейс профилировщика. Когда вы запустите этот скрипт, он выведет идентификатор трассировки (обычно @ID=2); запишите это.

  4. Как только у вас есть файл трассировки (.trc) (либо трассировка завершена из-за достижения максимального размера файла, либо вы остановили беговую трассировку, используя

    EXEC sp_trace_setstatus @ID, 0
    EXEC sp_trace_setstatus @ID, 2

Вы можете загрузить трассировку в профилировщик или использовать ClearTrace (очень удобно) или загрузить ее в таблицу следующим образом:

SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)

Затем вы можете запустить запрос для агрегирования данных, подобных этим:

SELECT COUNT(*) AS TotalExecutions, 
    EventClass, CAST(TextData as nvarchar(2000))
 ,SUM(Duration) AS DurationTotal
 ,SUM(CPU) AS CPUTotal
 ,SUM(Reads) AS ReadsTotal
 ,SUM(Writes) AS WritesTotal
FROM TraceTable
GROUP BY EventClass, CAST(TextData as nvarchar(2000))
ORDER BY ReadsTotal DESC

Как только вы определили дорогостоящие запросы, вы можете сгенерировать и проверить фактические планы выполнения.

21 голосов
/ 27 ноября 2011

Следующий скрипт дает вам результат.

SELECT TOP 10 
SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, 
qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC 
4 голосов
/ 12 декабря 2009

Я никогда раньше не слышал об этом инструменте, но Microsoft предоставляет набор отчетов, которые отлично справляются с этой задачей, включая самые медленные запросы. Посмотрите их Отчеты панели мониторинга производительности .

Не уверен, что они совместимы с SQL 2008, но стоит проверить.

2 голосов
/ 20 апреля 2011

В SQL Server 2008 появился новый инструмент Performance Studio , основанный на динамических представлениях управления, автоматически поддерживаемых сервером, который дает представление о производительности сервера. Стоит проверить.

2 голосов
/ 03 ноября 2008

Будет ли SQL Server Profiler делать то, что вам нужно? Я еще не использовал 2008, так что я не знаю, есть ли еще этот инструмент, но, если это так, я думаю, вы можете настроить трассировку для регистрации запросов, которые соответствуют определенным критериям (например, те, которые выполняются и загружают ЦП выше). определенный порог).

Мы использовали это в нашем проекте, и он довольно неплохо помог нам в устранении неполадок при плохо выполненных запросах (хотя не оставляйте его на полный рабочий день, для отслеживания работоспособности производительности используйте общие счетчики производительности Windows).

0 голосов
/ 14 июня 2013

(DELL) Quest SQL Optimizer для SQL Server 9.0 представляет модуль Find SQL, который позволяет пользователям находить наиболее ресурсоемкий SQL в вашем SQL Server. https://support.quest.com/softwaredownloads.aspx?pr=268445262

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