Database
 sql >> Datenbank >  >> RDS >> Database

Verwenden von Microsoft DiskSpd zum Testen Ihres Speichersubsystems

Zuvor habe ich die Grundlagen der Metriken und Tests von Speichersubsystemen in meinem Artikel Analyzing I/O Subsystem Performance for SQL Server behandelt, einschließlich einer Einführung in CrystalDiskMark 4.0. CrystalDiskMark wurde kürzlich umgeschrieben, um Microsoft DiskSpd für seine Tests zu verwenden, was es zu einem noch wertvolleren Tool für Ihre anfänglichen Testbemühungen für Speichersubsysteme macht. DiskSpd bietet die Funktionalität, die zum Generieren einer Vielzahl von Festplattenanforderungsmustern erforderlich ist, was bei der Diagnose und Analyse von E/A-Leistungsproblemen mit viel mehr Flexibilität als ältere Benchmark-Tools wie SQLIO sehr hilfreich sein kann. Es ist äußerst nützlich für das Testen von synthetischen Speichersubsystemen, wenn Sie ein größeres Maß an Kontrolle wünschen, als es in CrystalDiskMark verfügbar ist.

Jetzt werden wir ein wenig tiefer in die Verwendung von Microsoft DiskSpd eintauchen, um Ihr Speichersubsystem ohne Verwendung von CrystalDiskMark 4.0 zu testen. Dazu müssen Sie DiskSpd herunterladen und entpacken. Zur Vereinfachung kopiere ich immer die gewünschte ausführbare Datei diskspd.exe aus dem entsprechenden Ordner (amd64fre, armfre oder x86fre) in einen kurzen, einfachen Pfad wie C:\DiskSpd . In den meisten Fällen benötigen Sie die 64-Bit-Version von DiskSpd aus dem Ordner amd64fre.

Sobald Sie die ausführbare Datei diskspd.exe zur Verfügung haben, müssen Sie eine Eingabeaufforderung mit Administratorrechten öffnen (indem Sie „Als Administrator ausführen“ auswählen) und dann zu dem Verzeichnis navigieren, in das Sie die Datei diskspd.exe kopiert haben.

Hier sind einige der Befehlszeilenparameter, mit denen Sie beginnen sollten:

Parameter Beschreibung
-b Blockgröße der E/A, angegeben als (K/M/G). Beispielsweise bedeutet –b8K eine Blockgröße von 8 KB, was für SQL Server relevant ist
-d Testdauer in Sekunden. Tests von 30-60 Sekunden sind normalerweise lang genug, um gültige Ergebnisse zu erhalten
-o Ausstehende I/Os (dh Warteschlangentiefe) pro Ziel, pro Worker-Thread
-t Worker-Threads pro Testdateiziel
-h Deaktivieren Sie das Software-Caching auf Betriebssystemebene und das Hardware-Schreib-Caching, was eine gute Idee zum Testen von SQL Server ist
-r Zufälliges oder sequentielles Flag. Wenn –r verwendet wird, werden zufällige Tests durchgeführt, andernfalls werden sequentielle Tests durchgeführt
-w Prozentsatz schreiben. Beispielsweise bedeutet –w25 25 % Schreibvorgänge, 75 % Lesevorgänge
-Z Größe des Arbeitslasttest-Schreibquellpuffers, angegeben als (K/M/G). Wird verwendet, um Zufallsdaten für Schreibvorgänge bereitzustellen, was eine gute Idee für SQL Server-Tests ist
-L Erfassen Sie Latenzinformationen während des Tests, was eine sehr gute Idee zum Testen von SQL Server ist
-c Erstellt Workload-Datei(en) der angegebenen Größe, angegeben als (K/M/G)

Tabelle 1:Grundlegende Befehlszeilenparameter für DiskSpd

Sie sollten auch den Speicherort der Testdatei und den Dateinamen für die Ergebnisse am Ende der Zeile angeben. Hier ist eine Beispielbefehlszeile:

diskspd –b8K –d30 –o4 –t8 –h –r –w25 –L –Z1G –c20G T:\iotest.dat> DiskSpeedResults.txt

Diese Beispielbefehlszeile führt einen 30-sekündigen zufälligen E/A-Test mit einer 20-GB-Testdatei auf dem Laufwerk T:mit einem Schreib- und Leseverhältnis von 25 % und einer Blockgröße von 8 KB aus. Es wird acht Worker-Threads mit jeweils vier ausstehenden I/Os und einem Write-Entropy-Wert-Seed von 1 GB verwenden. Die Ergebnisse des Tests werden in einer Textdatei namens DiskSpeedResults.txt gespeichert. Dies ist ein ziemlich guter Parametersatz für eine SQL Server-OLTP-Arbeitslast.

Abbildung 1:Beispielbefehlszeile für DiskSpd

Die Ausführung des Tests beginnt mit einer standardmäßigen Aufwärmzeit von fünf Sekunden (bevor Messungen tatsächlich beginnen), und dann wird der eigentliche Test für die angegebene Dauer in Sekunden mit einer standardmäßigen Abkühlzeit von null Sekunden ausgeführt. Nach Abschluss des Tests stellt DiskSpd eine Beschreibung des Tests und die detaillierten Ergebnisse bereit. Standardmäßig ist dies eine einfache Textzusammenfassung in einer Textdatei mit dem von Ihnen angegebenen Dateinamen, die sich im selben Verzeichnis wie die ausführbare diskspd-Datei befindet.

So sehen die Ergebnisse für diesen speziellen Testlauf auf meiner Workstation aus.

Abbildung 2:Beispiel für DiskSpd-Testergebnisse

Der erste Abschnitt der Ergebnisse gibt Ihnen die genaue Befehlszeile an, die für den Test verwendet wurde, und gibt dann alle Eingabeparameter an, die für den Testlauf verwendet wurden (einschließlich der Standardwerte, die möglicherweise nicht in der tatsächlichen Befehlszeile angegeben wurden ). Als Nächstes werden die Testergebnisse beginnend mit der tatsächlichen Testzeit, der Thread-Anzahl und der Anzahl der logischen Prozessoren angezeigt. Der CPU-Abschnitt zeigt die CPU-Auslastung für jeden logischen Prozessor, einschließlich Benutzer- und Kernelzeit, für das Testintervall.

Als nächstes kommt der interessantere Teil der Testergebnisse. Sie erhalten die Gesamtbytes, Gesamt-I/Os, MB/Sekunde, I/Os pro Sekunde (IOPS) und Ihre durchschnittliche Latenz in Millisekunden. Diese Ergebnisse werden für jeden Thread (vier in unserem Fall) aufgeschlüsselt, mit separaten Abschnitten in den Ergebnissen für Total IO, Read IO und Write IO. Die Ergebnisse für jeden Thread sollten in den meisten Fällen sehr ähnlich sein. Anstatt mich zunächst auf die absoluten Werte für jede Messung zu konzentrieren, vergleiche ich die Werte gerne, wenn ich denselben Test auf verschiedenen logischen Laufwerken durchführe (nachdem ich den Speicherort der Testdatei in der Befehlszeile geändert habe), wodurch Sie die Leistung vergleichen können für jedes logische Laufwerk.

Noch interessanter ist der letzte Abschnitt der Testergebnisse. Es zeigt eine Perzentilanalyse der Verteilung der Latenztestergebnisse beginnend vom Minimalwert in Millisekunden bis zum Maximalwert in Millisekunden, aufgeschlüsselt nach Lese-, Schreib- und Gesamtlatenz. Die „Neunen“ in der %-Ile-Spalte beziehen sich auf die Anzahl der Neunen, wobei 3-Neunen 99,9 bedeuten, 4-Neunen 99,99 usw. Der Grund, warum die Werte für die Zeilen mit den höheren Perzentilen gleich sind, liegt darin, dass dieser Test hatte eine relativ geringe Anzahl von Gesamtoperationen. Wenn Sie die höheren Perzentile genau charakterisieren möchten, müssen Sie einen längeren Dauertest durchführen, der eine höhere Anzahl separater E/A-Vorgänge generiert.

Was Sie in diesen Ergebnissen suchen möchten, ist der Punkt, an dem die Werte einen großen Sprung machen. In diesem Test können wir beispielsweise sehen, dass 99 % der Lesevorgänge eine Latenz von 1,832 Millisekunden oder weniger hatten.

Abbildung 3:Verteilung der Latenzergebnisse

Wie Sie sehen können, ist das Ausführen von DiskSpd eigentlich ziemlich einfach, sobald Sie verstehen, was die grundlegenden Parameter bedeuten und wie sie verwendet werden. Sie können DiskSpd nicht nur über eine altmodische Befehlszeile ausführen, sondern auch mit PowerShell. DiskSpd gibt Ihnen auch viel detailliertere Informationen als Sie von SQLIO erhalten. Der kompliziertere Teil der Verwendung von DiskSpd ist die Analyse und Interpretation der Ergebnisse, was ich in einem zukünftigen Artikel behandeln werde.