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.
Sie sehen gerade einen Platzhalterinhalt von Facebook. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von Instagram. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen