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.
Antworten:
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:
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.
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 MEANINGLESS
wir 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.).
quelle
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.
quelle