2009-05-30 6 views
2

Ich bin derzeit in einer Performance-Tuning-Übung. Die Anwendung ist DB-intensiv mit sehr wenig Verarbeitungslogik. Die Leistungsoptimierung erfolgt in etwa so, wie DB-Aufrufe gemacht werden und die DB selbst.Sicherstellung der Datenbank-Performance als Datenvolumen erhöht

Wir haben die Abfrage tuning, Wir setzen die fehlenden Indizes, Wir reduziert oder eliminiert DB-Aufrufe, wo immer möglich. Die Anwendung läuft sehr gut und alles ist in Ordnung.

Mit kleineren Datenvolumen (sagen wir bis zu 100.000 Datensätze) ist die Leistung fantastisch. Meine Frage ist, was getan werden muss, um eine so gute Leistung bei höheren Datenmengen zu gewährleisten? Die Datenmengen werden voraussichtlich 10 Millionen Datensätze erreichen.

Ich kann mir eine Tabellen- und Indexpartitionierung vorstellen, die auf Dateisysteme hinweist, die für den DB-Speicher und die periodische Archivierung optimiert sind, um die Anzahl der Zeilen in Schach zu halten. Ich würde gerne wissen, was noch getan werden könnte. Irgendwelche Tipps/Strategien/Muster wären sehr hilfreich.

Antwort

4

Überwachung. Verwenden Sie einige Tools, um die Leistung und die Sättigung von CPU, Arbeitsspeicher und E/A zu überwachen. Mache Trendlinien, damit du weißt, wo dein nächster Engpass sein wird, bevor du dahin kommst.

Testen. Erstellen Sie Scheindaten, sodass Sie heute 10 Millionen Zeilen auf einem Testserver haben. Vergleichen Sie die Abfragen, die Sie in Ihrer Anwendung haben, und sehen Sie, wie gut sie sich bei steigendem Datenvolumen verhalten. Sie werden vielleicht überrascht sein, was zuerst zusammenbricht, oder es kann genauso verlaufen wie vorhergesagt. Der Punkt ist, dass Sie herausfinden können.

Wartung. Stellen Sie sicher, dass Ihre Anwendung und Infrastruktur einige Ausfallzeiten unterstützt, da dies immer notwendig ist. Möglicherweise müssen Sie Ihre Indizes defragmentieren und neu erstellen. Möglicherweise müssen Sie einen Teil der Tabellenstruktur umstrukturieren. Möglicherweise müssen Sie die Serversoftware aktualisieren oder Patches installieren. Um dies zu tun, ohne den kontinuierlichen Betrieb zu unterbrechen, benötigen Sie eine gewisse Redundanz, die in das Design integriert ist.

Forschung. Suchen Sie die besten Zeitschriften und Blogs für die von Ihnen verwendete Datenbankmarke und lesen Sie sie (z. B. http://www.mysqlperformanceblog.com, wenn Sie MySQL verwenden). Sie können gute Fragen stellen wie die, die Sie hier stellen, aber auch lesen, was andere Leute fragen und was ihnen empfohlen wird. Sie können Lösungen zu Problemen lernen, die Sie noch nicht einmal haben, so dass Sie sie haben, haben Sie einige Strategien zu beschäftigen.

+0

Das Problem mit Mock-Daten, die ich sehe, ist die Vielfalt der Werte vor allem auf den Indizes Spalten. Wenn es nicht die Art und Weise widerspiegelt, wie reale Daten verteilt werden, kann ich die Ergebnisse nicht ernst nehmen. Aber ja, wir würden sowieso die gefälschten Daten erstellen. – Sathya

+0

Sie können bereits die Verteilung von realen Daten basierend auf den aktuellen realen Daten berechnen, die Sie haben. Sie können dann Testdaten mit den gleichen Verteilungsmerkmalen erzeugen. Sie erwähnen die Vielfalt der Werte in Indexspalten. Ich verstehe nicht, warum Sie die aktuelle Verteilung nicht berechnen und dann Testdaten mit dem gleichen Muster generieren können. – RibaldEddie

+0

Richtig, Sie müssen absolut zufällige Testdaten nicht erzeugen. Obwohl es wahr ist, dass Ihr derzeitiger kleiner Datensatz nicht genau vorhersagen kann, wie die Datenvielfalt aussehen wird, wenn Sie Millionen von Zeilen haben, stimme ich nicht zu, dass dies bedeutet "die Ergebnisse können nicht ernst genommen werden". Realistisch betrachtet ist ein Test mit synthetischen Daten genau genug, um Ihnen zu helfen, Ihre SQL-Abfragen zu optimieren. –

1

Sie sind auf dem richtigen Weg:
1) Proper Indizes
2) DBMS Optionen tuning (Speicher-Caches, Puffer, ein Innengewinde zu steuern und so weiter)
3) Queries tuning (langsame Abfragen einloggen besonders und dann tune/umschreiben sie)
4) zum Einstellen Ihrer Abfragen und Indizes müssen Sie Ihre Anfragen Ausführung Forschungspläne
5) Powefu l dedizierter Server
6) Denken Sie an Abfragen, die Ihre Clientanwendungen an die Datenbank senden. Sind sie immer notwendig? Benötigen Sie alle Daten, nach denen Sie fragen? Ist es möglich, einige Daten zwischenzuspeichern?

1

Verschiedene Datenbanken müssen auf verschiedene Arten abgestimmt werden. Welche RDBMS verwenden Sie?

Woher wissen Sie, ob das, was Sie bisher getan haben, zu einer schlechten Leistung bei größeren Datensätzen führt? Haben Sie Ihre aktuellen Optimierungen mit einer großen Anzahl von Testdaten getestet?

Wenn Sie dies getan haben, wie hat sich die Leistung geändert? Wenn Sie die Datenbank so optimieren können, dass sie mit den Daten arbeitet, die sie jetzt hat, gibt es keinen Grund zu der Annahme, dass Ihre Methoden nicht mit einem größeren Datensatz funktionieren.

Je nach RDBMS ist die nächste Lösung einfach: größere, robustere Hardware. Mehr RAM, mehr Festplatten, mehr CPUs.

+0

Wir verwenden Oracle 10gR2. Ich arbeite an einer Roadmap, bei der mit steigendem Datenvolumen eine gut definierte Reihe von Schritten eine gute Leistung sicherstellen würde. – Sathya

+0

Klingt, als ob Sie in guter Verfassung sind und unsere Hilfe nicht brauchen! :) – RibaldEddie

0

10 Millionen Datensätze ist wahrscheinlich zu klein, um mit Partitionierung zu stören. Die Partitionierung ist in der Regel nur dann interessant, wenn Ihre Datenmengen eine Größenordnung oder einen größeren Umfang haben.

Index-Tuning für eine Datenbank mit 100.000 Zeilen wird wahrscheinlich 99% von dem, was Sie brauchen, mit 10 Millionen Zeilen bekommen. Halten Sie nach Tabellen- oder Indexbereichs-Scans auf den großen Tabellen im System Ausschau. Auf kleineren Tischen sind sie in Ordnung und in manchen Fällen sogar optimal.

Die Archivierung von alten Daten kann helfen, aber das ist wahrscheinlich für 10 Millionen Zeilen Overkill.

Eine mögliche Optimierung besteht darin, das Reporting auf einen separaten Server zu verschieben. Dies reduziert die Belastung des Servers - Berichte sind oft ziemlich asozial, wenn sie auf Betriebssystemen ausgeführt werden, da das Schema dafür nicht gut optimiert ist.

Sie können hierzu die Datenbankreplikation verwenden oder einen Datamart für die Berichterstellung erstellen. Die Replikation ist einfacher zu implementieren, aber die Berichte sind weniger effizient und nicht effizienter als im Produktionssystem. Der Aufbau eines Star-Schema-Data-Mart ist effizienter für das Reporting, erfordert aber zusätzliche Entwicklungsarbeit.

+0

Danke für die Hinweise. Die Db-Größe wird voraussichtlich jedes Jahr 200 GB wachsen. Ich könnte falsch gewesen sein, wenn ich 10 Millionen Zeilen gesagt habe. – Sathya

Verwandte Themen