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

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

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

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

6 ответов

Решение
  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

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

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

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 

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

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

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

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

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

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

Другие вопросы по тегам