it-swarm.com.de

Suchen Sie alle kürzlich in einer Datenbank ausgeführten Abfragen

[Ich bin ein T-SQL-Programmierer für Anfänger]
[.. 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 ziemlich nah schien, 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 (von denen die meisten eine Reihe von Sprocs waren). Darüber hinaus 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 (wenn eine ähnliche Frage bereits 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 Ausführungszeiten der Abfragen).

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

21

Diese Abfrage ergab einige seltsame Ergebnisse (von denen die meisten eine Reihe von Sprocs waren). Darüber hinaus zeigen alle dieser Ergebnisse Abfragen, die seit dem heutigen Nachmittag ausgeführt wurden (ich benötige Abfragen vom Morgen).

Dies liegt daran, dass Sie im Prozedur-Cache suchen und die Pläne, die für den Morgen verwendet wurden, möglicherweise nicht mehr dort leben (aufgrund von Speicherdruck, Neustart des Servers/der Instanz, manuellem Löschen des Prozess-Cache usw.).

Der eigentliche Weg, um die Abfragen für eine Instanz (oder genauer gesagt eine Datenbank) auszuführen, besteht darin, eine SQL-Ablaufverfolgung oder eine Sitzung für erweiterte Ereignisse zu erstellen. Bei ordnungsgemäßer Erstellung erhalten Sie die Informationen, nach denen Sie suchen.

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 zum nächsten Mal zu erledigende Aufgabe ist nicht ausreichend), wird es keine geben, sofern diese nicht bereits erstellt wurde Weg nativ , um diese Informationen zu erhalten.

Beginnen Sie zur späteren Bezugnahme mit einem SQL-Trace, der das Ereignis SQL: StmtCompleted erfasst. In XE wäre es das sql_statement_completed Veranstaltung.

Anstatt Ihre Suche nach Überresten von Statistiken zur Abfrageausführung fortzusetzen, würde ich meiner Meinung nach Zeit damit verbringen, herauszufinden, wie Sie die zu messende Arbeitslast erneut ausführen können. Richten Sie diesmal jedoch die richtige Verfolgung/Überwachung ein.

12
Thomas Stringer