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


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

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

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

6 64

6 ответов:

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

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

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

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

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

вы можете загрузить трассировку в Profiler, или использовать 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 делать то, что вам нужно? Я еще не использовал 2008, поэтому я не знаю, есть ли инструмент там, но если это так, я считаю, что вы можете настроить трассировку для регистрации запросов, которые соответствуют определенным критериям (например, те, которые выполняют и управляют процессором выше определенного порога).

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

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

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