2009-08-10 6 views
2

ich dies mit:am längsten laufenden Abfrage pro Datenbank

SELECT 
    * 
FROM 
    sys.dm_exec_query_stats s 
    CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) t 
ORDER BY 
    s.max_elapsed_time DESC 

die am längsten laufenden Abfragen auf der Server-Ebene zu erhalten.

Wie bekomme ich die am längsten laufenden Abfragen pro Datenbank? Ich möchte mich nur auf jeweils eine Datenbank konzentrieren.

Antwort

7

Der BOL-Eintrag für sys.dm_exec_query_stats erwähnt sys.dm_exec_query_plan

SELECT * 
FROM 
    sys.dm_exec_query_stats s 
    CROSS APPLY 
    sys.dm_exec_sql_text(s.sql_handle) t 
    CROSS APPLY 
    sys.dm_exec_query_plan(s.plan_handle) foo 
WHERE 
    foo.dbid = DB_ID('My_DB') 
ORDER BY 
    s.max_elapsed_time DESC 

Edit: Ich habe es nicht versucht. Ich sorge mich generell um Serverlast ...

+0

Bedenken Sie, dass dies nicht funktioniert, wenn eine Abfrage mehrere Datenbanken mit Joins durchquert. –

0
SELECT * FROM database1.dbo.table JOIN database2.dbo.table 

In welcher Datenbank lief die obige Abfrage? Was wäre, wenn der aktuelle Kontext zum Zeitpunkt der Ausführung Datenbank3 wäre? Was, wenn es einmal in der Datenbank4 und einmal in der Datenbank5 ausgeführt wurde?

Die Idee ist, dass Ausführungspläne nicht an eine Datenbank gebunden sind.

+0

Vermutlich hat er keine dieser datenbankübergreifenden Abfragen oder kümmert sich nicht um sie. –

+0

Hallo, ich möchte alle Abfragen anzeigen, die zu einer Datenbank gehören. Hilft das? – user94967

0

Es klingt wie Sie versuchen, die Datenbanken zu tunen. Ihre am längsten laufenden Abfragen sind möglicherweise nicht Ihre teuersten oder die, von denen Sie am meisten profitieren werden.

Sie sollten auf dem SQL Server Profiler nachschlagen, um die Abfragen zu identifizieren, die die meisten Ressourcen verwenden und an ihnen arbeiten.

Verwandte Themen