Vor kurzem enthaltenes SQL Server-Start-Ablaufverfolgungsflag 8048, um ein ernstes Spinlock-Konfliktproblem in einem SQL Server 2008 R2-System zu beheben.
Interessiert, von anderen zu hören, die Anwendungsfälle gefunden haben, in denen der Leistungswert durch das Ablaufverfolgungsflag 8048 (Heraufstufen der Strategie zum Gewähren des Abfragespeichers vom Knoten pro NUMA zum Kern pro), das Ablaufverfolgungsflag 8015 (SQL Server ignoriert physische NUMA) oder SUMA ( Interleaved (ausreichend einheitlicher Speicherzugriff, eine BIOS-Option auf einigen NUMA-Computern).
Trace-Flag 8015 http://blogs.msdn.com/b/psssql/archive/2010/04/02/how-it-works-soft-numa-io-completion-thread-lazy-writer-workers-and-memory -nodes.aspx
Es folgen detaillierte Informationen zur Systemauslastung, zu Messwerten aus gestörten Systemen und zu Messwerten aus dem System nach Eingriffen.
Trace Flag 8048 war ein 'Fix', aber war es der beste Fix? Hätte SQL Server, das physische NUMA aufgrund des Ablaufverfolgungsflags 8015 ignoriert, dasselbe erreicht? Wie wäre es, wenn Sie das BIOS so einstellen, dass der Speicher verschachtelt wird und der Server das SMP-imitierende SUMA-Verhalten anstelle des NUMA-Verhaltens aufweist?
Frieden! tw: @sql_handle
Informationen zum System: - 4 Hex-Core-Xeon E7540 bei 2,00 GHz, Hyperthread - 128 GB RAM - WS2008R2 - MSSQL 2008 R2 SP2 - maxdop 6
Informationen zur Arbeitsauslastung: - Tausende von Berichten mit geplanter Stapelverarbeitung / Warteschlange, die von zwei Berichtsanwendungsservern ausgeführt werden. - 3 Arten von Stapeln: täglich, wöchentlich, monatlich - Alle Verbindungen von Berichtsanwendungsservern zu SQL Server werden als ein einziges Dienstkonto hergestellt. - Maximale Berichtsgleichzeitigkeit = 90
Wichtigste Ergebnisse des gestörten Systems: - Ab Perfmon alle 15 Sekunden - - System bleibt zu 95% bis 100% ausgelastet - - SQL Server-Pufferseiten-Lookups <10000 pro Sekunde
- Von Warte- und Spinlock-DMVs, 5-Minuten-Intervalle
- Hohe CMEMTHREAD Kellner und Wartezeit
- High SOS_SUSPEND_QUEUE dreht und backoffs
Bob Dorrs CSS Engineer-Blogbeitrag zum Ablaufverfolgungsflag 8048 zeigt an, dass auf Systemen mit mehr als 8 Kernen pro NUMA-Knoten aufgrund eines Engpasses bei der Erteilung des Abfragespeichers ähnliche Symptome auftreten können. Das Ablaufverfolgungsflag 8048 ändert die Strategie auf pro Kern anstelle von pro NUMA-Knoten.
Die Intervention
MSSQL wurde mit -T8048 neu gestartet. Der Unterschied war sofort ersichtlich: Die Pufferseiten-Suchrate stieg über 1 Million und stieg auf 8 Millionen pro Sekunde. Die problematische Stapelverarbeitung, die zuvor nicht innerhalb von 24 Stunden abgeschlossen werden konnte, dauerte weniger als 4 Stunden. Eine andere Stapelarbeitslast, die nicht im Mittelpunkt der Untersuchung oder Intervention stand, wurde als Teil der Validierung des Korrekturwerts des Ablaufverfolgungsflags 8048 eingereicht (und sichergestellt, dass die unerwünschten Nebenwirkungen minimal waren). Dieser Berichtsstapel wurde zuvor in 2 Stunden abgeschlossen. Mit dem Trace-Flag 8048 wurde der Berichtsstapel in ungefähr 20 Minuten abgeschlossen.
Die nächtliche ETL stieß ebenfalls auf einen Vorteil. Die ETL-Zeit verringerte sich von ungefähr 60 Minuten auf 40 Minuten.
Ich habe Informationen aus mehreren Bereichen zusammengeführt und spekuliere, dass der hohe Grad an Berichtwarteschlangen, die Anzahl der gleichzeitigen Berichte größer als die Anzahl der Hardwarethreads und das einzelne Benutzerkonto für alle Berichte zusammengenommen einen NUMA-Knoten unter Druck setzen, bis der Worker-Thread-Druck dies verursacht hat werden für die nächste eingehende Verbindungsanforderung für dasselbe Benutzerkonto abgelehnt, und zu diesem Zeitpunkt würde der nächste NUMA-Knoten eine gewisse Anzahl von Verbindungen in der Nähe sofort erhalten. Jeder NUMA-Knoten würde am Ende mit einer hohen Wahrscheinlichkeit den Engpass bei der Gewährung des Abfragespeichers belasten.
Durch das Öffnen weiterer Lanes für das Gewähren von Abfragespeicher wurde der Engpass behoben. Aber ich bin mir nicht sicher, was es kostet. Der CSS-Beitrag von Bob Dorr macht deutlich, dass mit dem Ablaufverfolgungsflag 8048 zusätzlicher Speicheraufwand verbunden ist. Wird dieser Aufwand in der Single-Page-Allokator-Region durch den maximalen MSSQL 2008 R2-Serverspeicher bestimmt? In diesem Fall enthält das System wahrscheinlich nur einige wenige Datenbankseiten im Pufferpool-Cache. Wenn nicht, sollte der maximale Serverspeicher verringert werden, um Platz zu schaffen?
quelle