Wie führen Sie Auslastungstests und Kapazitätsplanung für Datenbanken durch?


34

Dies ist eine kanonische Frage zur Kapazitätsplanung für Datenbanken.

Verbunden:

Ich möchte eine kanonische Frage zu Werkzeugen und Methoden der Kapazitätsplanung für Datenbanken erstellen. Dies soll eine kanonische Frage sein.

Offensichtlich ist der allgemeine Workflow:

  • Stellen Sie Ihr Szenario auf
  • Überwachung hinzufügen
  • Verkehr hinzufügen
  • Ergebnisse auswerten
  • Aufgrund der Ergebnisse korrigieren
  • Spülen, wiederholen, bis es einigermaßen glücklich ist

Sie können gerne verschiedene Tools und Techniken für verschiedene Webserver, Frameworks usw. sowie Best Practices beschreiben.


Eine Datenbank ist fast nie ein eigenständiges System. Es ist im Hauptkontext der oft großen Anwendungsserver zu sehen, die sich vor ihnen befinden. DBs sind die Backend-Datengeräte. Wenn Sie die Last testen, müssen Sie dies berücksichtigen.
Nils

Antworten:


24

Festplatten- und RAM-Kapazitätsplanung

Das Planen der Datenträger- und Speicherkapazität für einen Datenbankserver ist eine schwarze Kunst. Mehr ist besser. Schneller ist besser.

Als allgemeine Richtlinie biete ich folgendes an:

  • Sie möchten mehr Speicherplatz, als Sie jemals benötigen.
    Schätzen Sie nach bestem Wissen, wie viel Speicherplatz Sie für die nächsten 3-5 Jahre benötigen, und verdoppeln Sie ihn dann.
  • Sie möchten genügend RAM, um Ihre Datenbankindizes im Arbeitsspeicher zu halten, Ihre größte Abfrage mindestens zweimal zu verarbeiten und dennoch genügend Speicherplatz für einen funktionsfähigen Betriebssystem-Festplatten-Cache zu haben.
    Die Indexgröße hängt von Ihrer Datenbank ab, und alles andere hängt stark von Ihrem Datensatz und Ihrer Abfrage- / Datenbankstruktur ab. Ich werde als Vorschlag "Mindestens die doppelte Größe Ihres größten Tisches" anbieten, aber beachten Sie, dass dieser Vorschlag bei wirklich umfangreichen Data-Warehousing-Vorgängen, bei denen der größte Tisch Dutzende oder Hunderte von Gigabyte umfassen kann, nicht funktioniert.

Jeder Datenbankanbieter hat einige Anweisungen zur Leistungsoptimierung Ihres Festplatten- / Speicher- / Betriebssystem-Kernels - Verbringen Sie vor der Bereitstellung einige Zeit mit dieser Dokumentation. Es wird helfen.


Workload-Benchmarking und Kapazitätsplanung

Vorausgesetzt, Sie haben noch nicht bereitgestellt ...

Viele Datenbanksysteme werden mit Benchmarking-Tools ausgeliefert - PostgreSQL wird beispielsweise mit pgBench ausgeliefert .
Diese Tools sollten Ihre erste Anlaufstelle beim Benchmarking der Datenbankleistung sein. Wenn möglich, sollten Sie sie auf allen neuen Datenbankservern ausführen, um ein Gefühl dafür zu bekommen, wie viel Arbeit der Datenbankserver leisten kann.

Bewaffnet mit einem rohen Benchmark, den ABSOLUTELY MEANINGLESSwir als realistischeren Ansatz für das Benchmarking betrachten wollen: Laden Sie Ihr Datenbankschema und schreiben Sie ein Programm, das es mit Dummy-Daten auffüllt, und führen Sie dann die Abfragen Ihrer Anwendung für diese Daten aus.
Hierbei werden drei wichtige Punkte bewertet: 1. Der Datenbankserver (Hardware) 2. Der Datenbankserver (Software) 3. Ihr Datenbankdesign und die Interaktion mit (1) und (2) oben.

Beachten Sie, dass dies viel mehr Aufwand erfordert als einfache vorgefertigte Benchmarks wie pgBench: Sie müssen Code schreiben, um das Auffüllen durchzuführen, und Sie müssen möglicherweise Code schreiben, um die Abfragen und die Berichtsausführungszeit auszuführen.
Diese Art des Testens ist auch wesentlich genauer: Da Sie mit Ihrem Schema und Ihren Abfragen arbeiten, können Sie sehen, wie diese ausgeführt werden, und es bietet Ihnen die Möglichkeit, Ihre Datenbank / Abfragen zu profilieren und zu verbessern.

Das Ergebnis dieser Benchmarks ist eine idealisierte Ansicht Ihrer Datenbank. Gehen Sie sicherheitshalber davon aus, dass Sie in Ihrer Produktionsumgebung nur 50-70% dieser Leistung erzielen (der Rest ist ein Puffer, mit dem Sie unerwartetes Wachstum, Hardwareausfälle, Änderungen der Arbeitslast usw. bewältigen können).


Es ist zu spät! Es ist in Produktion!

Sobald Ihre Systeme in Produktion sind, ist es wirklich zu spät, um ein "Benchmarking" durchzuführen. Sie können die Abfrageprotokollierung / das Timing kurz einschalten und sehen, wie lange die Ausführung dauert, und Sie können einige "Stresstest" -Abfragen für große Datenmengen ausführen, während Sie ausgeschaltet sind Std. Sie können sich auch die CPU-, RAM- und E / A-Auslastung (Festplattenbandbreite) des Systems ansehen, um eine Vorstellung davon zu erhalten, wie stark es ausgelastet ist.
Leider geben Ihnen diese Dinge nur eine Vorstellung davon, was das System tut, und eine vage Vorstellung davon, wie nahe es der Sättigung ist.
Das bringt uns zu ...


Laufende Überwachung

Alle Benchmarks der Welt werden Ihnen nicht helfen, wenn auf Ihrem System plötzlich neue / andere Nutzungsmuster auftreten.
Für bessere oder schlechtere Datenbankbereitstellungen sind sie nicht statisch: Ihre Entwickler werden Dinge ändern, Ihre Datenmenge wird wachsen (sie scheinen nie zu schrumpfen) und Ihre Benutzer werden auf irgendeine Weise verrückte Kombinationen von Ereignissen erstellen, die Sie beim Testen nie vorhergesagt haben.

Um eine ordnungsgemäße Kapazitätsplanung für Ihre Datenbank durchzuführen, müssen Sie eine Art Leistungsüberwachung implementieren, um Sie zu warnen, wenn die Datenbankleistung nicht mehr Ihren Erwartungen entspricht. An diesem Punkt können Sie Abhilfemaßnahmen in Betracht ziehen (neue Hardware, DB-Schema oder Abfrageänderungen zur Optimierung der Ressourcennutzung usw.).


Hinweis: Dies ist ein allgemeiner Leitfaden für die Dimensionierung Ihrer Datenbankhardware und die Ermittlung des möglichen Missbrauchs. Wenn Sie sich immer noch nicht sicher sind, wie Sie feststellen können, ob ein bestimmtes System Ihren Anforderungen entspricht, wenden Sie sich an einen Datenbankexperten.
Es gibt auch eine Stack Exchange-Site, die sich speziell der Datenbankverwaltung widmet: dba.stackexchange.com . Durchsuchen Sie das Fragenarchiv oder durchsuchen Sie die Tags, die für Ihr Datenbankmodul spezifisch sind, um weitere Hinweise zur Leistungsoptimierung zu erhalten.


1
Darüber hinaus können Sie heutzutage SSDs für Swap- / On-Disk-Vorgänge verwenden. Dadurch werden Abfragen beschleunigt, die große temporäre Tabellen auf den Datenträgern verwenden. Das Hinzufügen weiterer SSDs ist im Allgemeinen eine sehr gute Idee.
Peter

2
@Peter Ich würde SSDs nicht als Swap-Speicher empfehlen (wenn Sie aktiv tauschen, ist die Abwanderungsrate sehr hoch), obwohl eine ausreichend große SSD und ein guter Verschleiß der Festplatte die Lebensdauer der Maschine verlängern können. Ich habe SSDs für temporären Tabellenbereich mit guten Ergebnissen gesehen.
Voretaq7

1
Bitte beachten Sie, dass dieser Hinweis in den Kommentaren zu SSDs jetzt 7 Jahre alt ist. Jeder Speicher, der eine Datenbank auf Ihrem Datenbankserver enthält, sollte 2019 oder später eine SSD sein.
Mark Henderson

1

Im Allgemeinen benötigen Sie realistische Anwendungsfälle, um die Leistung zu testen. Eine bewährte Methode besteht darin, Anwendungsentwickler und Endbenutzer einzubeziehen.

Zeichnen Sie auf, was sie normalerweise tun, und parametrisieren Sie es (Inhalt, Anzahl der gleichzeitigen Aktionen) für jeden Anwendungsfall.

Bauen Sie dann die Client-Seite auf. Eine einzige physische Maschine reicht oft nicht aus, um die Produktionslast aufzubauen.

Dann starten, bewerten, verbessern und erneut testen.

Sie werden überrascht sein, wo Engpässe auftauchen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.