Как я могу найти и найти наиболее дорогостоящие запросы?

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

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

Спасибо за кучи за любую помощь!

Ответ 1

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

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

  • Кратко запустите трассировку и затем приостановите ее. Goto File- > Export → Script Определение трассировки и выберите версию своего БД и сохраните файл. Теперь у вас есть sql script, который создает трассировку с гораздо меньшими накладными расходами, чем работа с графическим интерфейсом профилировщика. Когда вы запустите этот script, он выведет идентификатор трассировки (обычно @ID=2); обратите внимание на это.

  • Как только у вас есть файл трассировки (.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

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

Ответ 2

Следующий script дает результат.

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 

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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