Einen wunderbaren Freitag allerseits! Die Zeit bis zum Start des Kurses wird immer knapper. , deshalb teilen wir heute die Übersetzung eines weiteren nützlichen Materials zu diesem Thema.
Während der Entwicklung wurde beeindruckende Arbeit geleistet, um die Partitionierung von Tabellen zu verbessern. Tabellenpartitionierung ist eine Funktion, die in PostgreSQL schon lange existiert, aber, um es gelinde auszudrücken, bis zur Version 10 nicht wirklich nützlich war, wo sie zu einer äußerst praktischen Funktion wurde. Früher haben wir gesagt, dass die Tabellenvererbung unsere Umsetzung der Partitionierung ist, und das stimmt. Nur dieser Ansatz erforderte, dass Sie einen Großteil der Arbeit manuell erledigten. Wenn Sie beispielsweise wollten, dass Tupel während der INSERTs in die Partitionen eingefügt werden, mussten Sie Trigger einrichten, die dies für Sie erledigen. Die Partitionierung durch Vererbung war sehr langsam und kompliziert, um zusätzliche Funktionen darüber zu entwickeln.
In PostgreSQL 10 erlebten wir die Einführung der "deklarativen Partitionierung" – einer Funktion, die viele bisher ungelöste Probleme des älteren Verfahrens mit Vererbung adressiert. Dies führte zur Entstehung eines deutlich leistungsfähigeren Werkzeugs, das es uns ermöglicht, Daten horizontal zu partitionieren!
Vergleich der Funktionen
Mit PostgreSQL 11 kam ein beeindruckendes neues Set an Funktionen, die helfen, die Leistung zu steigern und partitionierte Tabellen für Anwendungen transparenter zu gestalten.



1. Einschränkende Ausnahmen verwenden
2. Fügt nur Knoten hinzu
3. Nur für partitionierte Tabellen, die auf nicht-partitionierte verweisen
4. Indizes müssen alle Schlüsselsäulen der Partition enthalten
5. Die Einschränkungen an beiden Seiten der Partition müssen übereinstimmen
Leistung
Hier haben wir auch gute Nachrichten! Eine neue Methode wurde hinzugefügt . Dieser neue Algorithmus kann geeignete Partitionen bestimmen, indem er die Bedingung der Abfrage durchläuft WHERE. Der vorherige Algorithmus prüfte hingegen jede Partition, um festzustellen, ob sie den Bedingungen entsprechen konnte. WHERE. Dies führte zu einer zusätzlichen Erhöhung der Planungszeit, während die Anzahl der Partitionen wuchs.
In Version 9.6 wurde das Routing von Tuples in Partitionen normalerweise durch das Schreiben einer Trigger-Funktion durchgeführt, die eine Reihe von IF-Anweisungen enthielt, um das Tuple in die richtige Partition einzufügen. Diese Funktionen konnten sehr langsam in der Ausführung sein. Mit der Einführung der deklarativen Partitionierung in Version 10 funktioniert dies deutlich schneller.
Mit einer partitionierten Tabelle mit 100 Partitionen können wir die Leistung des Ladens von 10 Millionen Zeilen in eine Tabelle mit 1 BIGINT-Spalte und 5 INT-Spalten bewerten.

Die Leistung der Abfrage dieser Tabelle zur Suche nach einem indizierten Datensatz und zur Ausführung von DML zur Manipulation eines Datensatzes (unter Verwendung von nur 1 Prozessor):

Hier sehen wir, dass die Leistung jeder Operation nach PG 9.6 erheblich gestiegen ist. Abfragen SELECT sehen viel besser aus, insbesondere die, die während der Anfragenplanung mehrere Abschnitte ausschließen können. Das bedeutet, dass der Planer einen Großteil der Arbeit überspringen kann, die er vorher erledigen musste. Zum Beispiel werden keine Wege mehr für unnötige Abschnitte gebaut.
Fazit
Die Partitionierung von Tabellen wird zu einer sehr leistungsstarken Funktion in PostgreSQL. Sie ermöglicht es, Daten schnell online abzurufen und sie offline zu übertragen, ohne auf den Abschluss langsamer, massiver DML-Operationen warten zu müssen.. Das bedeutet auch, dass verwandte Daten zusammen gespeichert werden können, sodass auf die benötigten Daten viel effizienter zugegriffen werden kann. Die Verbesserungen in dieser Version wären ohne die Entwickler, Reviewer und Committer, die unermüdlich an all diesen Funktionen gearbeitet haben, nicht möglich gewesen.
Danke an alle! PostgreSQL 11 sieht einfach fantastisch aus!
Hier ist ein kurzer, aber recht interessanter Artikel. Teilen Sie Ihre Kommentare und vergessen Sie nicht, sich für , in dem das Kursprogramm ausführlich erläutert wird, anzumelden.
Quelle: habr.com
