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

64
задан NomadTraveler 19 April 2012 в 02:19
поделиться

3 ответа

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

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

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

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

    ДОЛЖНОСТНОЕ ЛИЦО sp_trace_setstatus @ID, 0
    ДОЛЖНОСТНОЕ ЛИЦО 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

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

64
ответ дан Mitch Wheat 24 November 2019 в 15:57
поделиться

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

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

2
ответ дан cfeduke 24 November 2019 в 15:57
поделиться

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

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

4
ответ дан 24 November 2019 в 15:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: