Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да вляза и да намеря най-скъпите заявки?

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

     RPC:Completed
     SP:Completed
     SP:StmtCompleted
     SQL:BatchCompleted
     SQL:StmtCompleted
    
  2. Можете да започнете със стандартния шаблон за проследяване и да го отрежете. Не сте посочили дали това е за конкретна база данни или за целия сървър, ако е за конкретни Db, включете колоната DatabaseID и задайте филтър към вашата DB (SELECT DB_ID('dbname') ). Уверете се, че колоната с данни за логическо четене е включена за всяко събитие. Задайте проследяването да се регистрира във файл. Ако оставяте тази следа да работи без надзор във фонов режим, добра идея е да зададете максимален размер на файла за проследяване, да речем 500MB или 1GB, ако имате достатъчно място (всичко зависи от това колко активност има на сървъра, така че ще трябва да го смучаш и да видиш).

  3. Започнете за кратко проследяването и след това го поставете на пауза. Отидете на File->Export->Script Trace Definition и изберете вашата DB версия и запазете във файл. Вече имате sql скрипт, който създава проследяване, което има много по-малко допълнителни разходи, отколкото преминаване през GUI на профайлъра. Когато стартирате този скрипт, той ще изведе Trace ID (обикновено @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

След като идентифицирате скъпоструващите заявки, можете да генерирате и прегледате действителните планове за изпълнение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Таблица с историята на SQL Server - попълване чрез SP или Trigger?

  2. SQL Server :SUM() от множество редове, включително клаузи where

  3. прикачената база данни е само за четене

  4. Върнете всички външни ключове, които препращат към дадена таблица в SQL Server

  5. Стандартни низове с числов формат, поддържани от FORMAT() в SQL Server