Gedrückt halten Gedrückt halten Gedrückt halten
Die Aspekte Leistung und Lizenzierung sind zwar interessant, sie sind jedoch nicht der einzige Aspekt einer zu berücksichtigenden Arbeitslast.
Eine Sache, die sich auf die Prozessorauswahl auswirken kann, sind Worker-Threads.
Arbeiterfäden?
Yeah, Kumpel! Dies sind die Dinge, die Ihr SQL Server verwendet, um Ihre Abfragen auszuführen und alle Hintergrundaufgaben zu erledigen, die erforderlich sind, um die Dinge in Form zu halten.
Wenn Sie von Worker - Threads laufen aus, schlagen Sie Threadpool wartet
THREADPOOL?
THREADPOOL. Dies ist eine der übelsten wartet Sie auf Ihrem Server, zusammen mit haben kann RESOURCE_SEMAPHORE und RESOURCE_SEMAPHORE_QUERY_COMPILE . Aber das sind Wartezeiten, und das ist eine CPU-Frage.
Also zurück zu dem Grund, warum dies Wiggity Wack ist.
So berechnet SQL Server Worker-Threads :
Beachten Sie, dass das Verdoppeln der Kernanzahl nicht das Verdoppeln der maximalen Arbeitsthreads bewirkt und Sie mit 1 Kern dieselbe Zahl erhalten wie mit 4 Kernen? Die Gleichung lautet:512 + ((logical CPUs - 4) * 16)
Das ist eine Schande, denn wenn die Anzahl der Kerne steigt, sinkt die Taktfrequenz normalerweise auf eine oder zwei Generationen zurück.
Ein Blick auf eine aktuelle Reihe von Intel-Chips zeigt einen ähnlichen Trend.
Woher weiß ich, wie viele Threads ich brauche?
Dies wird sehr davon abhängen:
- Anzahl der Nutzer
- Anzahl paralleler Abfragen
- Anzahl der seriellen Abfragen
- Anzahl der Datenbanken und Datensynchronisation (Mirroring, AGs, Backups für Log Shipping)
- Wenn Sie MAXDOP und CTFP auf den Standardeinstellungen belassen
Wenn Ihnen heute nicht die Zeit ausgeht, geht es Ihnen wahrscheinlich gut.
Aber woher weißt du, ob du es bist?
Es gibt gute Fragen, und es gibt gute Fragen, und ich möchte Ihnen etwas sagen, das ist eine GROSSE FRAGE .
THREADPOOL kann sich als Verbindungsproblem manifestieren , und im Fehlerprotokoll werden möglicherweise Meldungen darüber angezeigt, dass kein Thread erzeugt werden kann .
Sie können die Wartestatistiken Ihres Servers auch mit einem kostenlosen Tool wie sp_Blitz oder sp_BlitzFirst anzeigen (vollständige Offenlegung, ich trage zu diesem Projekt bei).
EXEC sp_Blitz
EXEC sp_BlitzFirst @SinceStartup = 1
Kann ich Max Worker Threads nicht einfach erhöhen?
Das Erhöhen der MWT kann zu erhöhten SOS_SCHEDULER_YIELD
Wartezeiten führen.
Das ist nicht das Ende der Welt, aber denken Sie daran, als würden ein paar schreiende Kinder in die Klasse eines Lehrers aufgenommen.
Plötzlich wird es für jedes Kind schwieriger, Aufmerksamkeit zu bekommen.
Wenn ein Prozess sein 4-ms-Quantum erschöpft , sind möglicherweise mehr Threads vor ihm, die darauf warten, auf die CPU zu gelangen.
Die Leistung könnte sich ähnlich anfühlen.
Wie kann ich weniger Arbeitsthreads verwenden?
Du grausamer [noun] von einem [noun], das sind Arbeiter mit zu unterstützenden Familien! Hypotheken! Träume!
Aber in Ordnung, ich muss das Endergebnis respektieren. Du bist der Boss.
Am einfachsten ist es, Einstellungen wie MAXDOP und Cost Threshold For Parallelism aus den Standardeinstellungen zu ändern.
Wenn Sie Fragen dazu haben, wie Sie diese einstellen können, klicken Sie hier:
Danach wird Ihre Arbeit viel schwieriger. Du musst herausfinden, was all diese Threads verbraucht. Sie können dies manchmal tun, indem Sie sich Ihre Wartestatistiken ansehen.
Insbesondere, wenn Sie hohe Wartezeiten für Parallelität ( CXPACKET
) UND hohe Wartezeiten für Sperren ( LCK_
) haben, stoßen Sie möglicherweise auf lange Blockierungsketten mit parallelen Abfragen.
Weißt du was stinkt? Während all diese parallelen Abfragen darauf warten, ihre Sperren zu erhalten, geben sie ihre zugewiesenen Threads nicht zurück.
Sie können fast hören, dass die vier Kern-VMs, die Ihr Administrator Ihnen versichert hat, mehr als genug für jede Arbeitsbelastung sind, die nach Luft schnappt, nicht wahr?
Leider ist die Art der Abfrage- und Indexoptimierung, die Sie durchführen müssen, um dieses Problem zu lösen, nicht Gegenstand der Frage.
Hoffe das hilft!