2012-11-30 12 views
45

Ich weiß, wie die letzten ausgeführten Abfragen erhalten Sie die folgende SQL in SSMS -Zuletzt ausgeführten Abfragen für eine bestimmte Datenbank

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 

Aber ich möchte, dass sie für eine bestimmte Datenbank zu finden. Ich möchte SQL Profiler nicht verwenden, wenn ich nicht muss. Außerdem glaube ich nicht, dass SQL Profiler es mir ermöglicht, Abfragen anzuzeigen, die bereits ausgeführt wurden, ohne dass die Profilerstellung aktiviert war. Ich muss dies von SSMS tun.

+7

Es wird nicht immer gefüllt, so dass Sie möglicherweise Zeug vermissen, aber als Anfang können Sie filtern nach 'WHERE dest.dbid = DB_ID ('Ihr Datenbankname')'. Wenn Sie nachverfolgen möchten, verwenden Sie Profiler * nicht *, wenn Sie nicht möchten, dass Ihr Monitoring tatsächlich zu Leistungsproblemen beiträgt. Verwenden Sie eine serverseitige Ablaufverfolgung, erweiterte Ereignisse oder ein Tool von Drittanbietern (ich kenne einen ziemlich guten). –

+0

während das ausgeführt wird, erhält es meine keine Zeile. Ich habe wenige andere Datenbanken. Nichts von ihnen zeigt etwas. Vielleicht ist es nicht DB_ID ('Datenbankname') .. die IDs sind anders? – Mukus

+0

Diese Abfrage oben ist unbrauchbar zu bestimmen, was alles ausgeführt, weil ich einige der Datenbank-IDs der Datenbanken nicht einmal sehen. Ich habe 'SELECT name, datenbank_id FROM sys.databases;' – Mukus

Antwort

55

Dies funktioniert für mich Abfragen zu jeder Datenbank in der Instanz. Ich bin Sysadmin auf der Instanz (Ihren priviledges überprüfen):

SELECT deqs.last_execution_time AS [Time], dest.text AS [Query], dest.* 
FROM sys.dm_exec_query_stats AS deqs 
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest 
WHERE dest.dbid = DB_ID('msdb') 
ORDER BY deqs.last_execution_time DESC 

Dies ist die gleiche Antwort ist, dass Aaron Bertrand zur Verfügung gestellt, aber es war in einer Antwort nicht gegeben.

+0

Diese Antwort ist korrekt. Der Grund, warum ich es nicht akzeptiert habe, ist, weil Aaron Bertrand 6 Monate vor Ihnen als Kommentar geantwortet hat. Ich werde ihm eine Gelegenheit geben, es als Antwort zu posten. Wenn er nicht will, werde ich deine annehmen. – Mukus

+0

Verstanden und anerkannt. Ich bin nicht für die Punkte, also keine Sorgen :) Ich habe nur geantwortet, damit wir es von der Seite "Unbeantwortete Fragen" bekommen können. –

+0

Akzeptiert es jetzt. – Mukus

Verwandte Themen