Wie kann ich feststellen, warum meine Abfrage so langsam ausgeführt wird?

Wie kann ich feststellen, warum meine Abfrage so langsam ausgeführt wird?

Ich habe eine Abfrage, die viel länger dauert als gewöhnlich, und ich kann nicht sagen, ob sie hängen geblieben ist.

Die Abfrage lautet ungefähr so:

INSERT XXXXXX WITH (TABLOCK)
SELECT * FROM YYYYYY with (NOLOCK)
WHERE ZZZZZZZZ = 1

Dadurch werden Hunderte Millionen Zeilen eingefügt. Ich habe einen Index auf ZZZZZZZZ.

Es gibt keine blockierenden Sitzungen. Wenn ich sys.dm_exec_requests überprüfe, zeigt es, dass der letzte Wartetyp istPAGEIOLATCH_SH Ich bin nicht sicher, was das bedeutet, außer dass es etwas mit E/A zu tun hat.

sys.dm_exec_sessions zeigt den Status „RUNNING“ an, aber sp_who2 zeigt ihn als SUSPENDED an.

Ich habe versucht festzustellen, ob die Tabelle wächst, aber wenn ich sp_spaceused XXXXXX aufrufe, erhalte ich immer dieselben Werte.

Was kann ich sonst noch tun?

AKTUALISIEREN:

Mithilfe der Antworten aufPaketüberfluss, habe ich festgestellt, dass esein E/A-Problemund dass meine Frageführt dazu, dass im Durchschnitt etwa 600 Datensätze pro Minute eingefügt werden).

Was ist mein nächster Schritt?

Was kann ich tun, bevor ich davon ausgehe, dass meine Festplatte defekt ist?

Antwort1

Die Abfrage wird ausgeführt. PAGEIOLATCH_SH ist typisch, wenn viele Einfügungen vorgenommen werden, da es sich um eine Wartezeit auf dem Festplattensubsystem handelt. Der Index beeinträchtigt tatsächlich die Leistung, da der Index für jede Einfügung in die Tabelle eine Einfügung erhält.

Hunderte Millionen sind eine Menge Datensätze und werden einige Zeit in Anspruch nehmen. Wie lange läuft es schon?

Antwort2

Wenn Sie 2005 oder 2008 verwenden, würde ich auf jeden Fall das von SQL MVP Adam Mechanic entwickelte Skript sp_whoisactive ausführen. Es ist im Grunde sp_who/sp_who2 auf Steroiden und sollte Ihnen alle Informationen liefern, die Sie benötigen.

http://sqlblog.com/files/folders/beta/entry27502.aspx

verwandte Informationen