Frage Wie laden Sie Tests und Kapazitätsplanung für Datenbanken?


Das ist ein kanonische Frage über die Kapazitätsplanung für Datenbanken.

Verbunden:

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

Offensichtlich ist der allgemeine Arbeitsablauf:

  • Setzen Sie Ihr Szenario an Ort und Stelle
  • Überwachung hinzufügen
  • Verkehr hinzufügen
  • Ergebnisse auswerten
  • Bereinigen Sie basierend auf den Ergebnissen
  • Spülen, wiederholen bis einigermaßen glücklich

Bitte beschreiben Sie verschiedene Tools und Techniken für verschiedene Web-Server, Frameworks, etc. sowie Best Practices.


32
2018-01-16 22:55


Ursprung


Eine Datenbank ist fast nie ein eigenständiges System. Es ist im großen Kontext von oft großen Anwendungsservern vor ihnen zu sehen. DBs sind die Back-End-Datengeräte. Wenn Sie die Last testen, müssen Sie das berücksichtigen. - Nils


Antworten:


Festplatten- und RAM-Kapazitätsplanung

Die Planung von Festplatten- und Speicherkapazität für einen Datenbankserver ist eine schwarze Kunst. Mehr ist besser. Schneller ist besser.

Als allgemeine Richtlinien biete ich folgendes an:

  • Sie möchten mehr Speicherplatz als Sie JE brauchen.
    Berücksichtigen Sie, wie viel Speicherplatz Sie für die nächsten 3-5 Jahre benötigen, und verdoppeln Sie ihn dann.
  • Sie benötigen genügend Arbeitsspeicher, um Ihre Datenbankindizes im Speicher zu halten, behandeln Sie Ihre größte Abfrage mindestens zweimal, und haben Sie immer noch genug Platz für einen gesunden Betriebssystem-Festplattencache.
    Die Indexgröße hängt von Ihrer Datenbank ab und alles andere hängt stark von Ihrer Datenmenge und Ihrer Abfrage- / Datenbankstruktur ab. Ich biete als Vorschlag "Mindestens 2x die Größe Ihrer größten Tabelle" an, aber beachten Sie, dass dieser Vorschlag bei wirklich großen Data-Warehousing-Operationen fehlschlägt, bei denen die größte Tabelle zehn oder Hunderte von Gigabyte groß sein kann.

Jeder Datenbankanbieter hat einige Anweisungen zur Leistungsoptimierung Ihres Festplatten- / Arbeitsspeicher- / Betriebssystemkerns. Nehmen Sie sich vor der Bereitstellung etwas 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 - zum Beispiel PostgreSQL Schiffe mit pgBench.
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 jetzt mit einem rohen Maßstab, der ist ABSOLUTELY MEANINGLESS Betrachten wir einen realistischeren Ansatz für das Benchmarking: Laden Sie Ihr Datenbankschema und schreiben Sie ein Programm, das es mit Dummy-Daten füllt, und führen Sie dann die Abfragen Ihrer Anwendung mit diesen Daten aus.
Dies benotet drei wichtige Dinge: 1. Der Datenbankserver (Hardware) 2. Der Datenbankserver (Software) 3. Ihr Datenbankdesign und wie es mit (1) und (2) oben interagiert.

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 etwas Code schreiben, um die Abfragen auszuführen und die Ausführungszeit des Berichts zu melden.
Diese Art des Testens ist auch wesentlich genauer: Da Sie mit Ihrem Schema und Ihren Abfragen arbeiten, können Sie sehen, wie sie funktionieren, und es bietet Ihnen die Möglichkeit, Ihre Datenbank / Abfragen zu profilieren und zu verbessern.

Die Ergebnisse dieser Benchmarks sind eine idealisierte Ansicht Ihrer Datenbank. Um sicherzugehen, gehen Sie davon aus, dass Sie nur 50-70% dieser Leistung in Ihrer Produktionsumgebung erzielen werden (der Rest ist ein Puffer, mit dem Sie mit unerwartetem Wachstum, Hardwarefehlern, Workload-Änderungen usw. umgehen können).


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

Sobald Ihre Systeme in Produktion sind, ist es wirklich zu spät zum "Benchmarking" - Sie können die Abfrageprotokollierung / Timing kurz aktivieren und sehen, wie lange die Ausführung dauert, und Sie können während des Offs einige "Stresstest" -Abfragen gegen große Datenmengen ausführen Std. Sie können auch die CPU-, RAM- und E / A-Auslastung (Festplattenbandbreite) des Systems betrachten, um sich ein Bild davon zu machen, wie stark es ausgelastet ist.
Leider geben Ihnen all diese Dinge eine Vorstellung davon, was das System macht, und ein vages Konzept, wie nahe es der Sättigung ist.
Das bringt uns zu ...


Laufende Überwachung

Alle Benchmarks der Welt helfen Ihnen nicht, wenn Ihr System plötzlich neue / andere Nutzungsmuster sieht.
Für bessere oder schlechtere Datenbank Bereitstellungen sind nicht statisch: Ihre Entwickler werden Dinge ändern, Ihr Datensatz wird wachsen (sie scheinen nie zu schrumpfen), und Ihre Benutzer werden irgendwie wahnsinnige Kombinationen von Ereignissen erstellen, die Sie nie in Tests vorhergesagt haben.

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


Hinweis: Dies ist ein sehr allgemeiner Leitfaden zur Größenanpassung Ihrer Datenbankhardware und zur Ermittlung des möglichen Missbrauchs. Wenn Sie immer noch nicht sicher sind, wie Sie feststellen können, ob ein bestimmtes System Ihren Anforderungen entspricht, sollten Sie mit einem Datenbankexperten sprechen.
  Es gibt auch eine Stack Exchange-Site, die speziell für die Datenbankverwaltung vorgesehen ist: dba.stackexchange.com. Durchsuchen Sie ihr Fragenarchiv oder durchsuchen Sie die für Ihre Datenbank-Engine spezifischen Tags nach weiteren Hinweisen zur Leistungsoptimierung.


24
2017-11-20 12:26



Darüber hinaus können Sie heutzutage SSDs für Swap- / On-Disk-Operationen verwenden. Dadurch werden Abfragen beschleunigt, die große temporäre Tabellen auf den Datenträgern verwenden. Daher ist es im Allgemeinen eine sehr gute Idee, weitere SSDs hinzuzufügen. - Peter
@Peter Ich würde SSDs für Swap Space nicht empfehlen (wenn Sie aktiv Swapping betreiben, gibt es eine sehr hohe Churn Rate), obwohl mit einer ausreichend großen SSD und einem guten Wear Leveling die Festplatte die Lebensdauer der Maschine halten kann. Ich habe gesehen, SSDs für den temporären Tabellenbereich mit guten Ergebnissen verwendet. - voretaq7


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, parametrisieren Sie sie (Inhalt, Anzahl gleichzeitiger Aktionen) für jeden Anwendungsfall.

Dann bauen Sie die Client-Seite auf. Eine einzelne physische Maschine reicht oft nicht aus, um die Produktionslast aufzubauen.

Dann feuern Sie es an, färben Sie, verbessern Sie und prüfen Sie wieder.

Sie werden überrascht sein, wo die Flaschen steigen.


0