PostgreSQL 11: Die Evolution der Partitionierung von Postgres 9.6 bis Postgres 11

Einen wunderbaren Freitag allerseits! Die Zeit bis zum Start des Kurses wird immer knapper. „Relationale DBMS“, deshalb teilen wir heute die Übersetzung eines weiteren nützlichen Materials zu diesem Thema.

Während der Entwicklung PostgreSQL 11 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.

PostgreSQL 11: Die Evolution der Partitionierung von Postgres 9.6 bis Postgres 11
PostgreSQL 11: Die Evolution der Partitionierung von Postgres 9.6 bis Postgres 11
PostgreSQL 11: Die Evolution der Partitionierung von Postgres 9.6 bis Postgres 11
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 zum Entfernen von Partitionen. 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.

PostgreSQL 11: Die Evolution der Partitionierung von Postgres 9.6 bis Postgres 11

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):

PostgreSQL 11: Die Evolution der Partitionierung von Postgres 9.6 bis Postgres 11

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 einem Tag der offenen Tür, in dem das Kursprogramm ausführlich erläutert wird, anzumelden.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster