SQL Split / Zusammenführen von Tabellenpartitionen: Was ist der beste Ansatz zu implementieren?

StackOverflow https://stackoverflow.com/questions/160128

  •  03-07-2019
  •  | 
  •  

Frage

Microsoft in seinem MSDN Eintrag über SQL 2005-Partitionen zu verändern, aufgelistet einige mögliche Ansätze:

  • Erstellen Sie eine neue partitionierten Tabelle mit der Partitionsfunktion gewünscht wird, und dann die Daten aus der alten Tabelle in die neue Tabelle einfügen, indem Sie ein INSERT INTO ... SELECT FROM-Anweisung.
  • Erstellen Sie einen partitionierten gruppierten Index auf einem Haufen
  • Drop und wieder aufzubauen, indem Sie die Transact-SQL-Anweisung CREATE INDEX mit der DROP EXISTING = ON-Klausel einen vorhandenen partitionierten Index.
  • Führen Sie eine Folge von ALTER PARTITION FUNCTION-Anweisungen.

Jede Idee, was die effizienteste Art und Weise für einen großen Maßstab sein wird DB (Millionen von Datensätzen) mit Partitionen auf der Grundlage der Daten der Aufzeichnungen (so etwas wie monatliche Partitionen), wo Daten erstreckt sich über 1-2 Jahre?

Auch wenn ich meistens Zugang (zum Lesen) aktuelle Informationen, wird es sinnvoll sein, eine Partition für die letzten X Tage zu halten, und der ganze Rest der Daten wird eine andere Partition sein? Oder ist es besser, zu dem Rest der Daten zu partitionieren (für jeden Direktzugriff basierend auf Datumsbereich)?

War es hilfreich?

Lösung

würde ich den ersten Ansatz empfehlen - eine neue partitionierten Tabelle erstellen und in sie einfügen - weil es Ihnen den Luxus zu vergleichen Ihre alten und neuen Tabellen gibt. Sie können Abfragepläne gegen beide Arten von Tabellen testen und sehen, ob Ihre Fragen in der Tat schneller sind, bevor in die neue Tabelle Design Schneiden über. Sie können feststellen, keine Verbesserung gibt es, oder Sie können, bevor sie sich auf Ihrem Endergebnis verschiedene Partitionierungsfunktionen / Systeme ausprobieren möchten. Sie können sich auf etwas anderes als Datumsbereich partitionieren möchten -. Datum ist nicht immer wirksam

Ich habe Partitionierung erfolgt mit 300-500m Zeile Tabellen mit Daten, verteilt auf 6-7 Jahre, und dass Tischeinsatz Ansatz war der, den ich am nützlichsten gefunden.

Sie gefragt, wie zu partitionieren - die beste Antwort ist, zu versuchen, Ihre Partitionen so zu gestalten, dass Ihre Abfragen eine einzelne Partition treffen werden. Wenn Sie neigen dazu, Abfragen auf die jüngsten Daten zu konzentrieren, und wenn Sie zu diesem Zeitpunkt Feld filtern, die in Ihrer where-Klauseln, dann ja, haben eine separate Partition für die letzten X Tage.

Beachten Sie, dass Sie die partitionierten Feld in der where-Klausel angeben müssen. Wenn Sie nicht das Feld spezifizieren, dann wird die Abfrage wahrscheinlich geht jede Partition zu treffen, die Daten zu erhalten, und an diesem Punkt werden Sie keine Performance-Gewinne haben.

Ich hoffe, das hilft! Ich habe eine Menge von Partitionierungs getan, und wenn Sie ein paar Beispiele von Tabellenstrukturen und Anfragen zu stellen, das wird Ihnen helfen, eine bessere Antwort für Ihre Umgebung zu erhalten.

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