SQL Server Tempdb auf SSD mit E / A.

8

Wir haben kürzlich unsere Tempdb-Dateien auf eine neue SSD aufgeteilt und sehen:

5348 Vorkommen von E / A-Anforderungen, deren Ausführung in Datei [T: \ tempdb \ tempdb4.ndf] länger als 15 Sekunden dauert.

Dieser Fehler tritt mehrfach auf. Wir haben die Fehler nicht gesehen, als tempdb wieder auf seinem ursprünglichen RAID 5-Home war. Ich habe ein Tutorial zu SQLIO befolgt und denke, dass die SSD beim zufälligen Lesen / Schreiben mit 8 KB viel schneller sein sollte als die vorherigen RAID 5-Festplatten. Warum sehen wir diese Fehler?

Um zu beweisen, dass nicht alles in Ordnung ist, dauert die Batch-Datei, die wir über Nacht ausführen (wenn diese Fehler auftreten), 7 Stunden. Auf den alten Festplatten dauerte es 6,25 Stunden.

Die Festplatten befinden sich in einem direkt angeschlossenen Array. Das RAID5 für Daten, RAID 10 für Protokolle und ein freier Steckplatz, den wir für die SSD verwendet haben. RAID 5 und SSD sind für eine Blockgröße von 64 KB formatiert. Das Protokoll ist falsch auf 4 KB Blockgröße eingestellt (ich weiß - wird behoben, wenn ich eine Chance bekomme).

Dies sind die Ergebnisse von SQLIO:

T-Laufwerk (ssd)
Ios = 8 KB zufälliges Schreiben, IOs / Sek. = 31847,48, MBs / Sek. = 248,8
Ios = 8 KB zufälliges Lesen, IOs / Sek. = 76391,66, MBs / Sek. = 596,8

S-Laufwerk (RAID 5)
Ios = 8 KB zufälliges Schreiben, IOs / Sek. = 2601,3, MBs / Sek. = 20,32
Ios = 8 KB zufälliges Lesen, IOs / Sek. = 3138,45, MBs / Sek. = 24,51

Bei sequenziellen 64K-Lese- / Schreibvorgängen waren sie ungefähr gleich.

Tempdb ist in 4 1,5-GB-Dateien aufgeteilt (dies ist vor und nach dem Umzug gleich).

SQL Server 2012 ist auf SP3 gepatcht.

Haben Sie eine Idee, was dazu führen kann, dass all diese E / A-Fehler von SQL Server gemeldet werden?

Handelt es sich möglicherweise um ein Array- oder HBA-Treiberproblem? Muss eine einzelne Festplatte, die einem freien Steckplatz in einem direkt angeschlossenen Array hinzugefügt wurde, im Hinblick auf den Cache sorgfältig konfiguriert werden?

G Devine
quelle
1
Hast du diesen Link schon gefunden? Möglicherweise müssen Sie einige Dinge ausprobieren. sqlservercentral.com/Forums/Topic1814711-2799-1.aspx
Shaulinator
2
Sind Schreib-Caching-Mechanismen aktiviert (Festplatteneinstellungen, Betriebssystemeinstellungen)? Die Blockgröße kann ein kleines Problem sein. Welche Verbindungsbandbreite haben Sie, da es nicht lokal, sondern über einen Host-Bus-Adapter (HBA) angeschlossen ist: 2 Gbit / s, 4 Gbit / s, 8 Gbit / s? (Dies entspricht einem Durchsatz von 250 MB / s, 500 MB / s bzw. 1000 MB / s.) Maximieren Sie die Bandbreite der HBAs? Die Frage ist: Befinden sich alle Festplatten auf denselben HBAs? Single HBA / Dual HBA, Konfiguration? Was ist die Warteschlangentiefenlänge der verwendeten HBAs?
John aka hot2use
2
Wie viele Festplatten befanden sich im Raid-Set?
Tom V - versuchen Sie topanswers.xyz
Der ursprüngliche Speicherort der Tempdb befand sich auf einem RAID 5 mit 4 Festplatten. Ich warte auf eine Antwort des SAN-Teams bezüglich Caching und der HBA-Konfiguration
G Devine

Antworten:

7

Ich würde Ihnen dringend empfehlen, Ihr neues Laufwerk T: \ mit Crystal Disk Mark zu testen. Lesen Sie hier den Reiseführer von Brent Ozar:

So testen Sie Ihren Speicher mit CrystalDiskMark

Vergleichen Sie die Ergebnisse vom Laufwerk T: \ mit

  • die alte RAID 5-Festplatte (wo sich früher Tempdb befand)
  • Ihre Maschine

Wenn die SSD langsamer als diese beiden anderen Geräte ist und sich in Ihrem Setup nichts anderes geändert hat *, liegt wahrscheinlich ein Problem mit der Festplatte selbst oder dem verwendeten Treiber oder dem Controller für das Array vor, in dem sich diese Festplatte befindet. usw.

* Dinge, die sich möglicherweise geändert haben, seit Sie tempdb verschoben haben:

  • Die Anzahl der Tempdb-Dateien für die Datenbank hat zugenommen oder abgenommen (jemand sagte "Hey, warum nicht, da wir die Datenbank neu starten müssen, um Tempdb trotzdem zu verschieben").
  • Wartungsaufgaben wurden so verschoben, dass sie mit dem jetzt langsamen nächtlichen Job zusammenfallen (insbesondere solche, die das Potenzial haben, Tempdb hart zu treffen, wie Indexwiederherstellungen oder Checkdb).
  • Das Wartungsfenster zum Verschieben von Tempdb wurde auch verwendet, um neuen Code (möglicherweise für den nächtlichen Job) bereitzustellen, der temporäre Tabellen stärker nutzt oder Abfragen mit fehlerhaften Verschüttungen usw. enthält

Nächste Schritte

Da die Festplatte anscheinend relativ schnell ist (gemäß den von Ihnen freigegebenen Benchmarks), ist es meiner Meinung nach eine gute Idee, den Inhalt sys.dm_io_virtual_file_statsvor und nach dem von Ihnen erwähnten nächtlichen Stapeljob zu protokollieren . Hier erfahren Sie, wie viel E / A während dieses Vorgangs auf Tempdb ausgeführt wird. Dies ist wichtig, da möglicherweise wirklich mehr E / A vorhanden sind, als die Festplatte verarbeiten kann. Also, was Sie tun:

  1. Führen Sie diese Abfrage unmittelbar vor der geplanten Ausführung Ihres nächtlichen Stapeljobs aus:

    select * 
    from sys.dm_io_virtual_file_stats((select DB_ID('tempdb')), default);
  2. Speichern Sie die Ergebnisse irgendwo (wie Excel oder so - wahrscheinlich nicht in tempdb: P)

  3. Warten Sie 7 Stunden (bis der Auftrag beendet ist)
  4. Führen Sie dieselbe Abfrage aus und speichern Sie die Ergebnisse
  5. Bearbeiten Sie Ihre Frage, um die Ergebnisse einzuschließen

Wir können dann die Differenz der beiden Snapshots nehmen und bestimmen, wie viele Bytes während des Jobs gelesen / geschrieben wurden. Sie können diese Zahlen auch verwenden, um die Gesamtlatenz während dieses Zeitraums zu berechnen.

Hinweis: Ein detaillierterer Ansatz besteht darin, die Ergebnisse dieser Abfrage alle 5 Minuten in einer Tabelle zu protokollieren (oder weniger, wenn Sie möchten).

Josh Darnell
quelle
Danke jadarnel27. Ich werde einen Blick darauf werfen und die Ergebnisse veröffentlichen
G Devine
3

Dieses Problem scheint nun behoben zu sein.

Ich habe das Problem bei unserem SAN-Team angesprochen und sie haben bestätigt, dass das Caching auf der SSD-Festplatte im Array deaktiviert ist. Sobald das Caching aktiviert war, verschwanden die Fehler aus dem SQL Server-Fehlerprotokoll.

Ich muss zugeben, dass ich nicht wusste, dass das RAID-Array diese zusätzlichen Einstellungen benötigt. Ich hatte erwartet, dass es ohne Intervention funktionieren würde.

Sie haben auch die Smart Array-Software aktualisiert und die neuesten Patches angewendet, was sie meiner Meinung nach sowieso hätten tun sollen und keinen DBA benötigt, um dies vorzuschlagen.

Vielen Dank an alle, die sich die Zeit genommen haben, dieses Problem mit mir zu besprechen.

Garrett

G Devine
quelle