Hier finden Sie alle kürzlich ausgeführten Abfragen in einer Datenbank

21

[Ich bin ein Anfänger-T-SQL-Programmierer]
[..und hoffentlich bin ich auf der richtigen Stack-Exchange-Site]

Ich möchte eine Liste aller Abfragen erhalten, die ich ausgeführt habe (zumindest die, die ich heute seit dem Morgen ausgeführt habe). Ich muss einen Bericht über die Ausführungszeiten der Abfragen erstellen.

Die Online-Suche brachte mir nicht viele nützliche Informationen. Die einzige Abfrage, die ich online gefunden habe und die mir ziemlich nahe kam, ist

SELECT
    deqs.last_execution_time AS [Time], 
    dest.TEXT AS [Query]
 FROM 
    sys.dm_exec_query_stats AS deqs
    CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY 
    deqs.last_execution_time DESC

Diese Abfrage ergab einige seltsame Ergebnisse (die meisten waren Sprocs). Außerdem zeigen alle diese Ergebnisse Abfragen, die seit dem heutigen Nachmittag ausgeführt wurden (ich benötige Abfragen vom Morgen).

Ich konnte in den vorherigen Fragen nichts finden (falls bereits eine ähnliche Frage gestellt wurde, weisen Sie mich bitte darauf hin).

Ich habe einige Vorschläge zu SQL Profiler gesehen, aber ich denke, Profiler würde mir nur helfen, wenn ich den Trace bereits gestartet habe (korrigieren Sie mich, wenn ich falsch liege).

Kann mir jemand vorschlagen, wie ich vorgehen soll, um eine Liste aller Abfragen zu erhalten, die seit dem Morgen in der Datenbank ausgeführt wurden (einschließlich der Abfrageausführungszeiten).

[Es wäre hilfreich (keine Voraussetzung), wenn ich auch irgendwie den Benutzernamen des Benutzers erhalten könnte, der die Abfrage ausgeführt hat.]

Prashanth Tilleti
quelle

Antworten:

12

Diese Abfrage ergab einige seltsame Ergebnisse (die meisten waren Sprocs). Außerdem zeigen alle diese Ergebnisse Abfragen, die seit dem heutigen Nachmittag ausgeführt wurden (ich benötige Abfragen vom Morgen).

Das liegt daran, dass Sie im Prozedur-Cache suchen und die Pläne, die am Morgen verwendet wurden, möglicherweise nicht mehr dort vorhanden sind (aufgrund von Speicherdruck, Neustart des Servers / der Instanz, manuelles Löschen des Proc-Caches usw.).

Der eigentliche Weg, um die Abfragen für eine Instanz (oder genauer gesagt für eine Datenbank) auszuführen, besteht darin, eine SQL-Ablaufverfolgung oder eine erweiterte Ereignissitzung zu erstellen. Bei korrekter Erstellung erhalten Sie die gewünschten Informationen.

Wenn Sie nach Ausführungsstatistiken für diesen Morgen und nur für diesen Morgen suchen (dh, das Einrichten der oben genannten Überwachungsimplementierungen als proaktive und beim nächsten Mal auszuführende Aufgabe reicht nicht aus), ist dies nicht der Fall, sofern diese nicht bereits erstellt wurden Weg nativ , um diese Informationen zu erhalten.

Beginnen Sie als zukünftige Referenz mit einem SQL-Trace, der das Ereignis SQL: StmtCompleted aufzeichnet . In XE wäre es das sql_statement_completedEreignis.

Meiner Meinung nach würde ich, anstatt Ihre Suche nach Resten von Abfrageausführungsstatistiken fortzusetzen, anfangen, Zeit damit zu verbringen, herauszufinden, wie die zu messende Arbeitsauslastung erneut ausgeführt werden kann. Richten Sie diesmal jedoch vorher die ordnungsgemäße Verfolgung / Überwachung ein.

Thomas Stringer
quelle
Kann ich nach SQL: StmtCompleted Data Columns filtern?
Kiquenet