Vor ein paar Monaten sah ich mich mit einer ähnlichen Situation konfrontiert, in der die MAXDOP-Einstellung als Standardeinstellung festgelegt war und alle Worker-Threads durch eine Run Away-Abfrage erschöpft waren.
Remus wies darauf hin, dass dies als Verhungern des Arbeiterthreads bezeichnet wird .
In diesem Fall wird auf Ihrem Server ein Speicherauszug erstellt.
Wenn Sie auf 2008R2 + SP1 und höher sys.dm_server_memory_dumps
sind, erhalten Sie auch den Speicherort der Dump-Datei.
Nun zurück zum Problem:
Es gibt 1 Scheduler-Monitor-Thread pro NUMA-Knoten, und da Sie 2 NUMA-Knoten haben, gibt es 2 Scheduler-Monitor-Threads, die alle 60 Sekunden für diesen bestimmten NUMA-Knoten für die Integritätsprüfung aller Scheduler verantwortlich sind, während sichergestellt wird, dass der Scheduler nicht mehr reagiert oder nicht.
Jedes Mal, wenn eine neue Arbeitsanforderung aus der Worker-Warteschlange des Schedulers abgerufen wird, werden die Arbeitsvorgänge ausgeführt werden Zähler erhöht. Wenn sich also eine Arbeitsanforderung in der Warteschlange des Schedulers befindet und innerhalb von 60 Sekunden keine der Arbeitsanforderungen verarbeitet hat, wird der Scheduler als blockiert betrachtet.
Aufgrund einer Run-Away-Abfrage oder einer umfangreichen Parallelität tritt ein Zustand auf, in dem Worker-Threads erschöpft sind, da alle Threads von dieser einzelnen Run-Away-Abfrage oder übermäßig langen Blockierungen belegt sind und keine Arbeit ausgeführt werden kann, es sei denn, dieser fehlerhafte Prozess wird abgebrochen.
Am besten stimmen Sie zuerst die Einstellung für den maximalen Parallelitätsgrad ab . Standard von0
bedeutet, dass SQL Server alle verfügbaren CPUs für die parallele Verarbeitung verwenden kann, indem alle Arbeitsthreads erschöpft werden.
Es gibt viele Gründe, die zur Erschöpfung von Arbeitsthreads führen können:
- Ausgedehnte lange Blockierungsketten führen dazu, dass SQL Server keine Arbeitsthreads mehr hat
- Umfangreiche Parallelität führt auch zur Erschöpfung der Worker-Threads
- Warten Sie lange auf jede Art von "Schloss" - Spinlocks, Riegel. Ein verwaistes Spinlock ist ein Beispiel.
Lesen Sie hier meine Antwort , die Ihnen zeigt, wie Sie den MAXDOP-Wert für Ihre Serverinstanz berechnen können.
Es wird außerdem dringend empfohlen, Wartestatistikinformationen zu Ihrer Datenbankserverinstanz zu erfassen.
max degree of parallelism
konfigurierten und wie viele Prozessoren befinden sich derzeit auf dem Server zusammen mit der NUMA-Konfiguration? Sie können verwendencoreinfo.exe
von Sysinternals Anzahl der Prozessoren und NUMA - Konfiguration zu erfahren.