SQL Server - Verwendet jemand SUMA, Ablaufverfolgungsflag 8048 oder Ablaufverfolgungsflag 8015?

21

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 8048 http://blogs.msdn.com/b/psssql/archive/2011/09/01/sql-server-2008-2008-r2-on-newer-machines-with-more-than-8-cpus -presented-per-numa-node-may-need-trace-flag-8048.aspx

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?

sql_handle
quelle

Antworten:

12

Dies ist ein großartiger Beitrag.

Um Ihre letzte Frage zu beantworten, würde ich spekulieren, dass Ihre Antwort "ja" ist.

Das heißt, ich hätte wahrscheinlich eine sanfte Nummer verfolgt, bevor ich auf die Spurensicherung zurückgegriffen hätte. Ich denke, Sie haben Recht mit der Zuweisung der numa-Knoten und das könnte die Wurzel Ihres Problems sein. Über Soft Numa können Sie die Anforderungen abhängig von der Anzahl der Numa-Knoten (4?) Auf 4 skalieren, sofern dies die richtige Nummer ist, und anschließend über die IP-Adresse jeden Host einem bestimmten Numa-Knoten zuweisen Dazu würde ich Hyper-Threading deaktivieren. Zusammengenommen würde sich das Problem wahrscheinlich verringern, jedoch auf Kosten weniger Scheduler.

Bei einem anderen Gedanken würde ich die erzwungene Parametrisierung betrachten - die Tatsache, dass Ihre Last Ihre CPU so hoch treibt, ist sehr interessant und es kann sich lohnen, dies zu untersuchen.

Schließlich wird auf Systemen mit mehreren Nodes in der Regel alle N Sekunden die Ausgabe der folgenden Abfragen in eine Tabelle ausgegeben. Eine interessante Analyse, wenn Änderungen an der Arbeitslast oder Ablaufverfolgungsflags implementiert werden:

SELECT getdate() as poll_time, node_id, node_state_desc, memory_node_id, online_scheduler_count, active_worker_count, avg_load_balance, idle_scheduler_count
FROM sys.dm_os_nodes WITH (NOLOCK) 
WHERE node_state_desc <> N'ONLINE DAC'

und

SELECT top 10 getdate() as sample_poll, wait_type, count (*)
FROM sys.dm_os_waiting_tasks
WHERE [wait_type] NOT IN
('CLR_SEMAPHORE','LAZYWRITER_SLEEP','RESOURCE_QUEUE','SLEEP_TASK','SLEEP_SYSTEMTASK',
'SQLTRACE_BUFFER_FLUSH','WAITFOR', 'BROKER_TASK_STOP',
'BROKER_RECEIVE_WAITFOR', 'OLEDB','CLR_MANUAL_EVENT', 'CLR_AUTO_EVENT' ) 
GROUP BY wait_type
ORDER BY COUNT (*) DESC
Jeremy Lowell
quelle
Vielen Dank für die Erwähnung der Aufgaben sys.dm_os_nodes und sys.dm_os_waiting_tasks. Ich schreibe eine Reihe gespeicherter Prozeduren, um die Systemaktivität zu profilieren, zunächst, um eine etwas optimierte Grundlinie zu verfolgen, und dann, um auf Abweichungen zu achten. Momentan werden Wartezeiten und Drehungen erfasst, als Nächstes folgen Speicherzuweisungen (einschließlich DOP-per-Memory-Zuweisungen) ... als Nächstes einzelne Kellner und Knoten, wie Sie besprochen haben ... und dann vielleicht Speicherangestellte und Cache-Zähler ...
sql_handle
1
Ein weiterer interessanter Indikator ist in perfmon: SQLServer: Buffer Node :. Die Zähler in dieser Familie von Interesse sind Ausländische Seiten, Freie Seiten, Seitenlebenserwartung, Gesamtseiten, Zielseiten und Gestohlene Seiten. Ich vermute, dass Sie vor der Implementierung des Ablaufverfolgungsflags eine sehr hohe Anzahl an fremden Seiten hatten - Haben Sie TF 834 aktiviert? Wenn ja, habe ich festgestellt, dass es nicht jedem numa-Knoten Speicher in einer ausgeglichenen Weise zuweist, was zu einer sehr hohen Menge an teuren Remote-numa-Knotenspeichersuchen führt. Das System, auf dem ich dieses Problem hatte, enthielt zu der Zeit 1 TB RAM.
Jeremy Lowell
gute Argumente. Ich habe die Pufferknotenmetriken beobachtet. Am merkwürdigsten war, dass Knoten 00 anfangs keine fremden Seiten hatte, während die anderen Knoten massive Zahlen hatten. Ich denke, das lag daran, dass unsere ETL den Puffer-Ramp-Up mit einer Thread-Anzahl durchgeführt hat, die niedrig genug ist, um vollständig auf den Puffer-Knoten / NUMA-Knoten 00 zu passen. Wir haben das Trace-Flag 834 nicht aktiviert, werden aber bald mit dem Testen beginnen. Unsere Workload-Tests unter Linux Oracle 11gR2 haben großen Nutzen für den Speicher großer Seiten gezeigt. Ich denke, wir werden auch in Windows mit SQL Server Gewinne sehen.
sql_handle
@Mike Soft NUMA vs TF 8048. Ich denke, mit Soft NUMA könnte ich 'Speicherknoten' innerhalb von NUMA-Knoten erstellen. Wenn ich also eine weiche NUMA für jeden Kern erstellen würde, gäbe es (möglicherweise) 24 Spuren für Anforderungen zur Speicherzuweisung für Abfragen. Aber vielleicht auch 24 Speicherknoten? Ich wäre ein wenig besorgt über den Overhead beim Verwalten von 24 Speicherknoten, bei denen jeder Kern jedes Mal 'fremde' Seitenreferenzen erzeugt, wenn er eine weiche NUMA-Grenze überschreitet, und über wirklich fremde Referenzen, wenn er eine Grenze überschreitet, um auf eine Seite zu verweisen, die beide unterschiedlich ist weiche NUMA und harte NUMA. Ich werde basteln und sehen, ob ich etwas erkennen kann.
sql_handle