Sie können das Attention- Ereignis im Profiler mit den Ereignissen zum Erfassen der T-SQL-Anweisungen verwenden. Es gibt nicht unbedingt genau an, was das Aufmerksamkeitsereignis ist, als ich es getestet habe. Ich denke also, dass es der Ereignissequenz folgt, können Sie die Abfragen schätzen, bei denen ein Problem auftritt. Ich hatte keine Chance, es mit Code und allem zu testen.
Ich bin jedoch auf ein genaues Beispiel mit erweiterten Ereignissen gestoßen, mit dem Timeout-Abfragen gefunden werden können, und dieses Beispiel stammt aus SQL Server 2008. Es stammt von Jonathan Kehayias: Ein XEvent pro Tag (9 von 31) - Zielwoche - pair_matching
Timeout-Fehler sind clientseitig und der Fehler kommt von dem Anbieter (oder Client), der mit der Datenbankverbindung verwendet wird. SQL Server verfolgt nicht unbedingt den Überblick oder bietet keine intuitive Methode, um diese aufzuspüren.
Bei Verwendung einer Ablaufverfolgung sind Zeitüberschreitungen auf der SQL Server-Seite im Grunde Abfragen, die einen Start haben, aber nicht abgeschlossen sind. Ich bin auf ein sehr gutes Video gestoßen, das ein Beispiel von Sean McCown zeigt. Finden Sie mit Profiler Abfrage-Timeouts . Jetzt ist es kein solider Beweis, wie Sean im Video feststellt, dass es andere Dinge gibt, die dazu führen könnten, dass eine Transaktion kein Ende hat.
Eine Zusammenfassung der Schritte:
- Erstellen Sie in Profiler eine Ablaufverfolgung, die die Startereignisse und abgeschlossenen Ereignisse für gespeicherte Prozeduren und TSQL erfasst
- Laden Sie diese Daten in eine Tabelle
- Fragen Sie diese Daten ab, um die Startereignisse und dann die Endereignisse zu finden.
Wie das Beispiel im Video für SP:Starting
(44) und SP:Completed
(43) zeigt, sobald Sie Ihre Trace-Daten in eine Tabelle aufgenommen haben:
SELECT *
INTO #TraceStart
FROM MyTraceData
WHERE EventClass = 44
SELECT *
INTO #TraceEnd
FROM MyTraceData
WHERE EventClass = 45
SELECT TextData
FROM #TraceStart
EXCEPT
SELECT TextData
FROM #TraceEnd
Ich würde erwarten, dass dies mit erweiterten Ereignissen einfacher zu tun ist, habe aber nie versucht, diese Methode auf erweiterte Ereignisse zu übertragen. Ich bin nicht sicher, ob die SQL Server 2008-Version von Extended Events den Zugriff auf Fehler auf Clientebene wie 2012 und höher eröffnet hat. Das Obige ist nur eine schnelle und schmutzige Methode, die immer noch funktioniert.