Frage

Die Datenbank, die ich mit Arbeit bin derzeit mehr als 100 GiB und verspricht viel größer im nächsten Jahr zu wachsen oder so. Ich versuche, ein Partitionierungsschema zu entwerfen, die mit meinen Daten-Set funktionieren, aber so kläglich weit sind gescheitert. Mein Problem ist, dass Abfragen, die diese Datenbank typischerweise die Werte mehrerer Spalten in diesem einem großen Tisch testen, in Ergebnismengen zu enden, die in unvorhersehbarer Weise überlappen.

Jeder (die DBAs Ich arbeite mit) warnt vor Tabellen über eine gewisse Größe haben, und ich habe recherchiert und bewertet die Lösungen die ich kenne, aber sie scheinen alle auf einer Datencharakteristik zu verlassen, die für logische Tabelle erlaubt Partitionierung. Leider habe ich keinen Weg sehen, dass angesichts der Struktur meiner Tabellen zu erreichen.

Hier ist die Struktur unserer beiden Haupttabellen dies in die richtige Perspektive zu setzen.

Table: Case
Columns:
Year
Type
Status
UniqueIdentifier
PrimaryKey
etc.

Table: Case_Participant
Columns:
Case.PrimaryKey
LastName
FirstName
SSN
DLN
OtherUniqueIdentifiers

Beachten Sie, dass eine der Spalten oben kann als Abfrageparameter verwendet werden.

War es hilfreich?

Lösung

Anstatt Vermutung, messen. Sammeln Sie Statistiken der Nutzung ( Abfragen ausführen ), Blick auf die Motor eigene Statistiken wie sys.dm_db_index_usage_stats und Sie dann machen eine informierte Entscheidung: die Partition, die Salden Datengröße Bestzeiten und liefert die besten Affinität zu den am häufigsten Abfragen ausführen wird ein guter Kandidat sein. Natürlich werden Sie Kompromisse eingehen müssen.

Vergessen Sie auch nicht, dass Partitionierungs pro Index ist (wobei ‚Tisch‘ = einer der Indizes), nicht pro Tisch, so dass die Frage nicht, was partitionieren auf, aber welcher Indizes oder nicht zu partitionieren und welche Partitionierungsfunktion zu verwenden. Ihre Clustered-Indizes für die beiden Tabellen werden die wahrscheinlichsten Kandidaten offensichtlich (nicht viel Sinn nur einen nicht gruppierten Index zu partitionieren und nicht den gruppierten eine Partition) sein, so, es sei denn, Sie Redesign Ihrer gruppierten Tasten erwägen, die Frage ist wirklich für Ihren Clustered-Indizes, was Partitionierungsfunktion zu wählen.

Wenn ich eine Vermutung wagen würde ich, dass für jede Daten würde sagen, dass im Laufe der Zeit sammelt sich (wie ‚Fälle‘ mit einem ‚Jahr‘) die natürlichste Partition ist die Schiebefenster .

Andere Tipps

Wenn Sie keine andere Wahl haben Sie durch Tastenmodul die Anzahl der Partitionstabellen partitionieren können. Lassen Sie uns sagen, dass Sie zu 10 Tabellen partitionieren möchten. Sie definieren Tabellen:
Case00
Case01
...
Case09

Und Sie Daten von Unique partitionieren oder PrimaryKey-Modul 10 und legen Sie jeden Datensatz in der entsprechenden Tabelle (auf der einzigartigen Unique Je müssen Sie möglicherweise manuelle Zuordnung von IDs starten).

Wenn Sie eine Abfrage durchführen, müssen Sie dieselbe Abfrage auf alle Tabellen, und verwenden UNION fusionieren die Ergebnismenge in einer einzigen Abfrage-Ergebnis führen.

Es ist nicht so gut wie Partitionierung der Tabellen auf der Grundlage logischer Trennung, die auf die erwartete Abfrage entspricht, aber es ist besser als die Größenbeschränkung einer Tabelle zu treffen.

Eine weitere mögliche Sache zu betrachten (vor dem Partitionieren) ist Ihr Modell.

Sind Sie in einer normalisierten Datenbank? Gibt es noch weitere Schritte, die Performance durch unterschiedliche Entscheidungen in der Normalisierung / De- / Teil Normalisierung verbessern könnte? Gibt es Möglichkeiten, die Daten in ein Kimball-Stil dreidimensionales Stern-Modell zu verwandeln, die für die Berichterstattung / Abfrage- optimal ist?

Wenn Sie nicht Partitionen der Tabelle löschen gehen (Schiebefenster, wie erwähnt) oder verschiedene Partitionen unterschiedlich zu behandeln (Sie sagen alle Spalten können in der Abfrage verwendet werden), ich bin mir nicht sicher, was Sie versuchen zu raus aus der Partitionierung, die Sie nicht bereits aus Ihrer Indexierungsstrategie erhalten.

Ich bin keine Kenntnis von Tischlimits auf Zeilen. AFAIK, die Anzahl der Zeilen begrenzt nur durch den verfügbaren Speicher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top