-
Използвайте SQL Server Profiler (в менюто с инструменти в SSMS), за да създадете проследяване, което регистрира следните събития:
RPC:Completed SP:Completed SP:StmtCompleted SQL:BatchCompleted SQL:StmtCompleted
-
Можете да започнете със стандартния шаблон за проследяване и да го отрежете. Не сте посочили дали това е за конкретна база данни или за целия сървър, ако е за конкретни Db, включете колоната DatabaseID и задайте филтър към вашата DB (
SELECT DB_ID('dbname')
). Уверете се, че колоната с данни за логическо четене е включена за всяко събитие. Задайте проследяването да се регистрира във файл. Ако оставяте тази следа да работи без надзор във фонов режим, добра идея е да зададете максимален размер на файла за проследяване, да речем 500MB или 1GB, ако имате достатъчно място (всичко зависи от това колко активност има на сървъра, така че ще трябва да го смучаш и да видиш). -
Започнете за кратко проследяването и след това го поставете на пауза. Отидете на File->Export->Script Trace Definition и изберете вашата DB версия и запазете във файл. Вече имате sql скрипт, който създава проследяване, което има много по-малко допълнителни разходи, отколкото преминаване през GUI на профайлъра. Когато стартирате този скрипт, той ще изведе Trace ID (обикновено
@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
След като идентифицирате скъпоструващите заявки, можете да генерирате и прегледате действителните планове за изпълнение.