Ich habe eine Abfrage, um die Top 10-Abfragen basierend auf den gesamten logischen Lesevorgängen aus der DMV dm_exec_query_stats abzurufen.
SELECT TOP 10
SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
db_name(qt.dbid) as db_name,
qs.execution_count,
qs.total_logical_reads,
qs.total_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
SUBSTRING(CONVERT(varchar(19),qs.last_execution_time),1,19)
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC
Die Abfrage gibt alle angeforderten Informationen zurück, mit Ausnahme des Namens der Datenbank, aus der die Abfrage stammt oder an die sie gerichtet war. Ob ich dm_exec_sql_text oder dm_exec_query_plan verwende, das Ergebnis ist das gleiche.
Datenbankname (qt.dbid) als Datenbankname dm_exec_sql_text
oder
Datenbankname (qp.dbid) als Datenbankname dm_exec_query_plan
Beide geben NULL oder tempdb als Datenbanknamen zurück.
Das gleiche Problem tritt auf, wenn Sie Berichte -> Top-Leistungsabfragen nach durchschnittlicher E / A auswählen.
Der Datenbankname ist leer.
Wenn ich den Abfrageplan jedoch zur Abfrage hinzufüge und dann den Abfrageplan in SSMS öffne, kann ich den Namen der Ursprungsdatenbank anzeigen, indem ich den Mauszeiger über die verschiedenen Indexsuchen, Scans oder RID-Suchvorgänge bewege.
Ich habe festgestellt, dass im Abfrageplan mehrere Datenbanken referenziert sind, z. B. mssqlsystemresource zusammen mit der Trackit-Datenbank
Wenn der Abfrageplan den Namen der Datenbank oder der von der Abfrage betroffenen Datenbanken in meiner Top-10-Liste anzeigen konnte, liegt es nahe, dass ich in der Lage sein sollte, die Namen dieser Datenbanken mithilfe einer DMV abzurufen.
Wie kann ich die Top 10-Abfrage ändern, um den Namen der Datenbank für jede Abfrage abzurufen?
Oder gibt es einen besseren Weg, um die Top-10-Abfragen nach CPU- / E / A- / Speicherauslastung abzurufen und den Datenbanknamen oder die Datenbanknamen für jede der Top-10-Abfragen abzurufen?