Was ist der Unterschied zwischen last_worker_time und last_elapsed_time in DMV sys.dm_exec_query_stats?

11

Was bedeutet last_worker_time und last_elapsed_time in DMV sys.dm_exec_query_stats und was ist der Unterschied zwischen ihnen?

wenn ich unter Abfrage feuere

    SELECT TOP 20 
qs.last_worker_time, qs.last_worker_time/1000000 last_worker_time_in_S,
qs.last_elapsed_time, qs.last_elapsed_time/1000000 last_elapsed_time_in_S
FROM sys.dm_exec_query_stats qs
order by qs.last_worker_time desc

Ich bekomme das Ergebnis wie unten.

Geben Sie hier die Bildbeschreibung ein

Ich stelle fest, dass entweder beide gleich sind oder die verstrichene Zeit mehr als die Arbeitszeit ist. Ich möchte die Bedeutung beider nicht verstehen, damit es mir auch bei der Leistungsoptimierung helfen kann.


quelle

Antworten:

16

Die Arbeitszeit ist die Zeit, in der die Aufgabe (n) effektiv aktiv waren, einen Scheduler belegten und Code ausführten (dh nicht angehalten wurden). Die verstrichene Zeit ist die Uhrzeit. Bei einer DOP 1-Abfrage ist die Arbeitszeit höchstens die verstrichene Zeit, weniger, wenn die Aufgabe zu irgendeinem Zeitpunkt während der Ausführung angehalten wurde (daher würde die Uhrzeit vorrücken, die Arbeitszeit jedoch nicht). Bei DOP> 1 summieren sich die Arbeitszeiten, sodass sie die verstrichene Zeit überschreiten können, während sie noch suspendiert werden.

Ein signifikanter Unterschied zwischen der Arbeitszeit und der verstrichenen Zeit weist auf eine Blockierung hin. Betrachten Sie den 682616-Arbeiter im Vergleich zu 11509766: Dies ist eine Anforderung, die 11 Sekunden lang blockiert und auf etwas gewartet hat (wahrscheinlich eine Sperre).

Remus Rusanu
quelle
Hinweis: DOP steht für "Grad der Parallelität"; 1 bedeutet, dass die gesamte Abfrage von einer einzelnen CPU verarbeitet wird. Mehr als eine bedeutet, dass der Job in Threads unterteilt ist, von denen jeder von einer anderen CPU ausgeführt werden kann.
RDFozz
@RDFozz Sorry, ich weiß, das ist ein alter Thread. Ich wollte nur etwas korrigieren, was Sie gesagt haben. Das DOP gilt für jeden Operator im Ausführungsplan der Abfrage. Sie können also immer noch mehrere Threads pro Abfrage ausführen, nur nicht pro Operator. sqlmag.com/blog/common-misconception-about-maxdop
SpaceGhost440