Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Analysieren der E/A-Leistung für SQL Server

Einer der häufigsten Leistungsengpässe, die ich als Berater sehe, ist eine unzureichende Leistung des Speichersubsystems. Es gibt eine Reihe von Gründen für eine schlechte Speicherleistung, aber es ist immer eine nützliche Übung, sie zu messen und zu verstehen, was gemessen und überwacht werden muss.

Es gibt tatsächlich drei Hauptmetriken, die am wichtigsten sind, wenn es darum geht, die Leistung von I/O-Subsystemen zu messen:

Latenz

Die erste Metrik ist die Latenz, die einfach die Zeit ist, die ein I/O benötigt, um abgeschlossen zu werden. Dies wird oft als Reaktionszeit oder Servicezeit bezeichnet. Die Messung beginnt, wenn das Betriebssystem eine Anforderung an das Laufwerk (oder den Festplattencontroller) sendet, und endet, wenn das Laufwerk die Verarbeitung der Anforderung beendet. Lesevorgänge sind abgeschlossen, wenn das Betriebssystem die Daten empfängt, während Schreibvorgänge abgeschlossen sind, wenn das Laufwerk das Betriebssystem darüber informiert, dass es die Daten erhalten hat.

Bei Schreibvorgängen befinden sich die Daten möglicherweise immer noch in einem DRAM-Cache auf dem Laufwerk oder Festplattencontroller, abhängig von Ihrer Caching-Richtlinie und Ihrer Hardware. Write-Back-Caching ist viel schneller als Write-Through-Caching, erfordert jedoch eine Batteriesicherung für den Festplattencontroller. Für die Verwendung von SQL Server sollten Sie sicherstellen, dass Sie nach Möglichkeit Write-Back-Caching anstelle von Write-Through-Caching verwenden. Sie sollten auch sicherstellen, dass Ihr Hardware-Festplatten-Cache tatsächlich aktiviert ist, da ihn einige Datenträgerverwaltungstools standardmäßig deaktivieren.

Eingabe-/Ausgabevorgänge pro Sekunde (IOPS)

Die zweite Metrik sind Input/Output-Operationen pro Sekunde (IOPS). Diese Metrik steht in direktem Zusammenhang mit der Latenz. Beispielsweise bedeutet eine konstante Latenz von 1 ms, dass ein Laufwerk 1.000 IOs pro Sekunde mit einer Warteschlangentiefe von 1 verarbeiten kann. Je mehr IOs zur Warteschlange hinzugefügt werden, desto größer wird die Latenz. Einer der Hauptvorteile von Flash-Speicher ist, dass er parallel auf mehreren NAND-Kanälen lesen/schreiben kann, zusammen mit der Tatsache, dass es keine elektromechanischen beweglichen Teile gibt, die den Festplattenzugriff verlangsamen könnten. IOPS entspricht tatsächlich der Warteschlangentiefe geteilt durch die Latenz, und IOPS selbst berücksichtigt nicht die Übertragungsgröße für eine einzelne Datenträgerübertragung. Sie können IOPS in MB/s und MB/s in Latenz umrechnen, solange Sie die Warteschlangentiefe und die Übertragungsgröße kennen.

Sequenzieller Durchsatz

Der sequentielle Durchsatz ist die Rate, mit der Sie Daten übertragen können, normalerweise gemessen in Megabyte pro Sekunde (MB/s) oder Gigabyte pro Sekunde (GB/s). Ihre Metrik für den sequentiellen Durchsatz in MB/s entspricht IOPS multipliziert mit der Übertragungsgröße. Beispielsweise entsprechen 556 MB/s 135.759 IOPS mal einer Übertragungsgröße von 4096 Byte, während 135.759 IOPS mal einer Übertragungsgröße von 8192 Byte 1112 MB/s sequentieller Durchsatz wären. Trotz seiner alltäglichen Bedeutung für SQL Server wird der sequenzielle Datenträgerdurchsatz im Unternehmensspeicher häufig zu kurz gebracht, sowohl von Speicheranbietern als auch von Speicheradministratoren. Es kommt auch ziemlich häufig vor, dass die eigentlichen Magnetplatten in einem Direct Attached Storage (DAS)-Gehäuse oder einem Storage Area Network (SAN)-Gerät so ausgelastet sind, dass sie nicht ihren vollen sequenziellen Nenndurchsatz liefern können.

Der sequenzielle Durchsatz ist für viele gängige Datenbankserveraktivitäten von entscheidender Bedeutung, einschließlich vollständiger Datenbanksicherungen und -wiederherstellungen, Indexerstellung und -wiederherstellung sowie große sequenzielle Lesescans vom Typ Data Warehouse (wenn Ihre Daten nicht in den SQL Server-Pufferpool passen). Ein Leistungsziel, das ich bei neuen Datenbankserver-Builds gerne anstrebe, ist ein sequenzieller Durchsatz von mindestens 1 GB/s für jeden einzelnen Laufwerksbuchstaben oder Bereitstellungspunkt. Dieses Leistungsniveau (oder besser) macht Ihr Leben als Datenbankprofi so viel einfacher. Es macht so viele Ihrer üblichen Datenbankaufgaben so viel schneller und gibt Ihnen auch die Freiheit, häufigere Indexoptimierungen durchzuführen, wenn Sie einen Index für eine große Tabelle in Sekunden oder Minuten statt in Stunden erstellen können.

SQL Server-I/O-Workload-Metriken

Wenn es um die SQL Server- und E/A-Leistung geht, gibt es eine Reihe von Dingen, die Sie im Laufe der Zeit messen und überwachen sollten. Sie sollten das Lese-/Schreibverhältnis für Ihre Workload für alle Ihre Benutzerdatenbankdateien und für tempdb kennen. Die Verhältnisse sind für verschiedene SQL Server-Dateitypen und Workloads unterschiedlich. Sie können meine DMV-Diagnoseabfragen verwenden, um dies festzustellen, und Sie können auch die Festplattenaktivitätsansicht im SQL Sentry Performance Advisor verwenden, um auf einfache Weise eine vollständigere Ansicht Ihrer Festplattenaktivität zu erhalten, von einem übergeordneten Gesamtbild bis ganz nach unten zu einzelnen Dateien:

SQL Sentry-Leistungsratgeber:Festplattenaktivität

Sie sollten auch die typischen E/A-Raten für IOPS und sequentiellen Durchsatz messen. Im Windows-Leistungsmonitor (PerfMon) zeigen Lesevorgänge/Sek. und Schreibvorgänge/Sek. IOPS an, während Festplattenlesebytes/Sek. und Festplattenschreibbytes/Sek. den sequenziellen Durchsatz darstellen. Sie sollten PerfMon verwenden, um die durchschnittliche Datenträger-Sek./Lesen und die durchschnittliche Datenträger-Sek./Schreiben zu messen, was die Lese- und Schreiblatenz auf Datenträgerebene ist. Schließlich können Sie meine DMV-Diagnoseabfragen verwenden, um die durchschnittliche Lese- und Schreiblatenz auf Dateiebene für alle Ihre Benutzerdatenbankdateien sowie für tempdb zu messen.

Methoden zum Messen der E/A-Leistung

Sie können den Datenträgerabschnitt im Windows-Ressourcenmonitor verwenden, um eine schnelle Echtzeitansicht einiger wichtiger Datenträgermetriken für alle Ihre SQL Server-Datenbankdateien zu erhalten. Wenn Sie tiefer gehen, können Sie PerfMon verwenden, um die kritischen Leistungsindikatoren zu messen und zu überwachen, die ich zuvor erwähnt habe. Bevor Sie mit einem neuen Datenbankserver in die Produktion gehen, sollten Sie einige Festplatten-Benchmark-Tests durchführen, um festzustellen, welche Art von Leistung Ihr I/O-Subsystem tatsächlich liefern kann. Dies ist eigentlich nicht so schwierig oder zeitaufwändig (wenn Sie die richtigen Tools verwenden), wird aber oft vergessen, wenn ein neuer Datenbankserver bereitgestellt und getestet wird.

Der erste Festplatten-Benchmark, den Sie immer ausführen sollten, ist CrystalDiskMark 4.0, der kürzlich umgeschrieben wurde, um das relativ neue DiskSpd-Festplatten-Benchmark-Programm von Microsoft zu verwenden. Mit der Benutzeroberfläche von CDM 4.0 können Sie eine größere Auswahl an Testdateigrößen auswählen und auch die Warteschlangentiefe und die Anzahl der Threads für die Testläufe auswählen. Dadurch erhalten Sie eine serverähnlichere E/A-Arbeitslast und können auch neuere NVMe-Flash-Speichergeräte, die Warteschlangentiefen von mehr als 32 verarbeiten können, besser belasten.

CrystalDiskMark 4.03 Ergebnisse mit QD =32 und Threads =1

Abbildung 2:CrystalDiskMark 4.03-Ergebnisse mit QD =32 und Threads =4

Im Gegensatz zu früheren Versionen von CDM befinden sich die zwei relevantesten Zeilen für die Verwendung von SQL Server in der Mitte der Ergebnisanzeige. Dies sind die zufälligen 4K-Lese- und Schreibvorgänge mit einer hohen Warteschlangentiefe (standardmäßig 32) und die sequentiellen Lese- und Schreibvorgänge. Nachdem Sie einige Speicher-Benchmark-Tests mit CrystalDiskMark 4.0 durchgeführt haben, sollten Sie einige umfassendere Tests mit Microsoft DiskSpd durchführen. In einem zukünftigen Artikel werde ich behandeln, wie man DiskSpd verwendet, um umfassendere Tests für SQL Server durchzuführen.