Ich möchte wissen, ob es eine Möglichkeit gibt, bei einem Deadlock eine Benachrichtigung zu senden. Wenn ja, welche Abfragen wären erforderlich? Ich verstehe, dass sich SQL Server um Deadlocks kümmert. Ich hätte einfach gerne Informationen zu den betreffenden Abfragen.
Ich habe Folgendes gefunden, um lang laufende Abfragen zu ermitteln:
SELECT
creation_time
,last_execution_time
,total_physical_reads
,total_logical_reads
,total_logical_writes
, execution_count
, total_worker_time
, total_elapsed_time
, total_elapsed_time / execution_count avg_elapsed_time
,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
where total_elapsed_time >= 300000000 --5 min
ORDER BY total_elapsed_time / execution_count DESC;
Ich möchte wissen, ob das oben Genannte der richtige Weg ist, oder gibt es einen besseren Weg, um festzustellen, ob eine Abfrage länger dauert als ein bestimmtes Intervall, beispielsweise 5 Minuten, wie gezeigt?
Vielen Dank
Ich würde @ StanleyJohns Vorschlag bevorzugen, wenn Sie SQL2008 haben. Erweiterte Veranstaltungen sind es wert, sich mit einem Diagnosetool vertraut zu machen, und Jonathons An XEvent a Day- Reihe ist ein großartiger Ausgangspunkt.
Eine Alternative für Deadlocks besteht darin, die Ablaufverfolgungsflags 1204 und 1222 zu aktivieren , mit denen Deadlock-Informationen in das SQL-Fehlerprotokoll geschrieben werden. Aktivieren Sie beide, damit Sie die Informationen in zwei unterschiedlichen Formaten erhalten, wodurch es einfacher wird, komplexe Deadlock-Ketten zu verstehen.
quelle