Tipps zur Verbesserung der Leistung der Datenbank, die über 40 GB (Sql Server 2005) und monatlich um etwa 3 GB wächst

7

Die aktuelle DB oder unser Projekt hat diesen Monat über 40 GB überschritten und wächst durchschnittlich um 3 GB pro Monat. Jetzt sind alle Tabellen am besten normalisiert und die richtige Indexierung wurde verwendet. Aber immer noch, während die Größe wächst, braucht es mehr Zeit, um auch grundlegende Abfragen wie "Anzahl wählen (1) aus Tabelle" abzufeuern. So können Sie einige Punkte teilen, die in dieser Front helfen werden. Datenbank ist Sql Server 2005. Wenn wir Partitionierung implementieren würde es nicht einen Overhead verursachen?

Vielen Dank im Voraus.

    
HotTester 29.01.2010, 10:29
quelle

7 Antworten

8
  1. stellen Sie sicher, dass Sie geeignete / geeignete Indizes haben
  2. stellen Sie sicher, dass Sie über eine gute Strategie zur Indexpflege verfügen (z. B. um die Statistiken auf den neuesten Stand zu bringen / zu defragmentieren / auf dem neuesten Stand zu halten, um sicherzustellen, dass die Indizes weiterhin gut funktionieren)
  3. identifizieren schlecht funktionierende Abfragen und optimieren sie (möglicherweise wurden sie für kleine Datenvolumes geschrieben / getestet, wenn keine Leistungsprobleme auftauchen würden)
  4. Ziehen Sie in Erwägung, Ihre Daten zu partitionieren (z. B. unterstützt SQL 2005 und höher die Partitionierung, wenn Sie über die Enterprise Edition verfügen). Bearbeiten: Um die SQL Server-Partitionierung näher auszuführen, empfehle ich Ihnen, dies zu lesen MSDN Artikel über das Warum und das Wie. Generell wurde auf der QCon 2008 von Randy Shoup (eBay-Architekt) ein guter Vortrag über Skalierbarkeit gehalten, wobei einer der wichtigsten Punkte bei der Skalierung eines Systems im Allgemeinen die Partitionierung ist. Es ist hier zusammengefasst.
  5. ist Ihre Db-Server-Hardware ausreichend? könnte es von mehr Speicher profitieren? Bearbeiten: Wenn ich deinen Kommentar mit deinen Hardware-Informationen betrachte, denke ich, dass du es mit (mindestens) mehr RAM in das Spiel werfen könntest
  6. Sie können von einer Denormalisierung profitieren. Schwierig, spezifisch zu sein, ohne genaue Db-Struktur zu kennen, aber Denormalisierung kann bestimmte Abfragen auf Kosten von Datenduplikation / Festplattenspeicher
  7. verbessern
AdaTheDev 29.01.2010, 10:40
quelle
5

Eine 40-GB-Datenbank wird heutzutage nicht als große Datenbank angesehen. Und ein Wachstum von 3 GB pro Monat ist auch nichts Ungewöhnliches.

In den Bereichen müssen Sie jedoch wirklich auf einige kleine Dinge achten, mit denen Sie in kleineren Datenbanken zurechtkommen könnten. Da Sie über das Ausgeben einer Abfrage "SELECT COUNT (1) ..." schreiben, möchten Sie vielleicht über die Notwendigkeit solcher Abfragen nachdenken. Klingt so, als wäre dies eine Art "Anzahl der Zeilen in der Tabelle anzeigen". Brauchen Sie wirklich diese Art von "Basisabfragen", auf die Sie verzichten können? Unter besonderer Berücksichtigung dieser Frage: Brauchen Sie das Ergebnis, um genau zu sein, oder könnte es auch ein "guter Schätzwert" sein? Wenn dies der Fall ist, sollten Sie hier und da einen WITH-Hinweis (NOLOCK) einfügen, wo Genauigkeit nicht zwingend erforderlich ist. Verwenden Sie NOLOCK jedoch mit Bedacht, da falsche Daten mit unglaublicher Geschwindigkeit ausgegeben werden. : -)

Viele gute Vorschläge wurden von AdaTheDev erwähnt, lassen Sie mich nur einen Punkt hinzufügen:

Nichts bietet Ihnen eine bessere Leistung als ein solides und solides Schema. Und wer weiß, was zu dem Zeitpunkt, an dem Sie das Schema entworfen haben, als angemessen angesehen wurde, muss möglicherweise nach einiger Zeit in der Produktion überarbeitet werden. Dies gilt insbesondere für Indizes.

    
Frank Kalis 29.01.2010 11:47
quelle
3

Sie sollten hier einen Blick darauf werfen: Verbesserung der SQL Server-Leistung

    
Rubens Farias 29.01.2010 10:38
quelle
3

Ihr Gerät ist ziemlich niedrig, aber da Sie nicht einmal erwähnt haben, welche Festplatte Sie verwenden, ist das wahrscheinlich das Problem. Sie benötigen eine sehr schnelle Festplatte, um eine 40-GB-Datenbank mit 4 GB RAM zu unterstützen, mehrere Striped-Laufwerke wären ein absolutes Minimum.

    
cjk 29.01.2010 11:53
quelle
1

Ich würde mit Performance Monitor und SQL Server Profiler , um herauszufinden, welche die kritischsten Leistungsgrenzen auf Ihrem System sind. Danach hast du wahrscheinlich eine gute Idee, wo du anfangen sollst.

Hier ist ein Platz zum Starten: Fehlerbehebung bei Leistungsproblemen in SQL Server 2005

    
Joakim Backman 29.01.2010 14:01
quelle
0

Ich denke in einigen Punkten müssen Sie partitionieren. Es ist ein grundlegender Ansatz, um die Datenbank zu skalieren.

    
David Gruzman 29.01.2010 11:05
quelle
-1

Vielleicht möchten Sie auch zu den Grundlagen gehen und über den Grund, warum die Datenbank wächst, und über ihre Struktur nachdenken. 3GB pro Monat extra (und wahrscheinlich erhöht, wenn Sie erfolgreich sind) wird Sie früher oder später in Schwierigkeiten bringen; -)

    
Jan Doggen 29.01.2010 11:20
quelle