SQL Server Execution Plan zur Laufzeit ermitteln

19. November 2010

Es kann durchaus vorkommen, dass man nicht weiß welchen Execution-Plan der SQL-Server für ein Query nutzt. Bedingt durch Veränderung des Datenvolumens etc. kann es dann auch vorkommen, dass eine Query von einem Tag auf den nächsten extrem lange läuft. Möchte man den tatsächlichen Execution-Plan zur Laufzeit ermitteln, so hat man folgende Möglichkeit.

Die folgende Query filtert die offenen Sessions von meinem Beispielrechner “MyHost”. An dieser Stelle kann natürlich auch über andere Spalten der Tabelle sys.dm_exec_session gefiltert werden, z.B. login_name

   1: select session_id,request_id,plan_handle 

   2: from sys.dm_exec_requests 

   3: where session_id in ( 

   4:     select session_id from sys.dm_exec_sessions where host_name = 'MyHostname' 

   5: )

Als Ergebnis wird die Spalte plan_handle zurückgegeben. Diesen Wert verwendet man nun für die Selektion des Execution-Plans.

   1: select * 

   2: from sys.dm_exec_query_plan(<plan_handle>)

Im ResultSet wird jetzt die Spalte query_plan angezeigt. Dieses XML öffnet man, speichert es unter der Dateiendung *.sqlplan ab, und öffnet es im Management-Studio. Und schon hat man einen Execution-Plan.