Die Abfrage ist ein nicht-parallel (seriell) Plan , so dass es auf jeden Fall von Anfang bis Ende ausgeführt wird auf einem einzigen SQL Server - Worker - Thread mit einem einzigen SQLOS verbunden ist , Scheduler .
Aus Betriebssystemsicht unterliegt dieser einzelne Thread standardmäßig weiterhin den normalen Planungsalgorithmen von Windows. Ich sage "standardmäßig", da das Verhalten von der Einstellung der CPU-Affinitätsmaske abhängt .
Standardmäßig besteht die Maske nur aus Nullen. Dies bedeutet, dass Windows auswählen kann, auf welcher physischen Ausführungseinheit (z. B. Kern) der Thread pro Zeitscheibe ausgeführt werden soll. Wenn die CPU-Affinitätsmaske für den betreffenden Scheduler auf 1 gesetzt ist, ist der Scheduler jederzeit an eine bestimmte physische Verarbeitungseinheit gebunden.
Ein SQL Server-Thread, der zu 100% ausgeführt wird, springt also tendenziell um physische Einheiten herum, was zu einem "verschmierten" Muster führt. Wenn die Affinitätsmaske festgelegt ist, wird eine sauberere Spitze in der Aktivität angezeigt, da Windows den Thread nicht verschieben darf.
Alles in allem ist das Muster, das Sie im Task-Manager sehen, keine gute Möglichkeit, die CPU-Aktivität von SQL Server zu untersuchen. SQL Server ist nicht der einzige Prozess, der ausgeführt wird, wenn Ihre Abfrage ausgeführt wird. Sie sehen auch, dass die CPU-Auslastung von SSMS Ergebnisse empfängt und diese beispielsweise auf den Bildschirm schreibt.
SQL Server bietet eine Reihe dynamischer Verwaltungsobjekte, mit denen Sie beispielsweise Scheduler, Worker und Threads anzeigen können. Es gibt noch mehr Möglichkeiten, um den Status aktueller Sitzungen, Anfragen usw. anzuzeigen.
Falls diese Konzepte für Sie neu sind, lesen Sie den TechNet-Artikel, SQL Server Batch oder Task Scheduling und verwandte Inhalte.
Ein weiteres Problem ist, dass der vom Ausführungsplan zurückgegebene DOP 1 lautet
Der MAXDOP
Abfragehinweis begrenzt nur die Gesamtzahl der Scheduler, die eine Abfrage verwenden kann. Zur Kompilierungszeit kann der Optimierer basierend auf Kostenschätzungen zwischen einem seriellen und einem parallelen Plan entscheiden. Für eine sehr einfache SELECT
Abfrage wie die in der Frage wählt der Optimierer normalerweise einen "trivialen" Ausführungsplan, der niemals Parallelität verwendet.