PostgreSQL optimiert in Version 12 Indizes und Partitionen

Die Open-Source-Datenbank bringt neben Performanceverbesserungen unter anderem den Zugriff auf JSON-Daten über SQL/JSON Path Expressions mit.

In Pocket speichern vorlesen Druckansicht 69 Kommentare lesen
PostgreSQL optimiert in Version 12 Indizes und Partitionen
Lesezeit: 4 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Nach einer viermonatigen Betaphase ist PostgreSQL 12 nun allgemein verfügbar. Die Entwickler haben sich für das aktuelle Release vor allem auf Performanceverbesserung konzentriert. Unter anderem haben sie die B-Baum- und GiST-Indizes sowie den Umgang mit partitionierten Tabellen optimiert. Neu ist zudem der Zugriff auf JSON-Daten über SQL/JSON und das automatische Einbinden von WITH-Abfragen in andere Queries .

Der in der vor einem Jahr veröffentlichten Version 11 eingeführte Just-in-Time-Compiler (JiT) ist nun standardmäßig aktiviert. Er beschleunigt vor allem WHERE-Klauseln, Ziellisten, Projektionen und Aggregatfunktionen. PostgreSQL verwendet zum Kompilieren LLVM, und Voraussetzung für den JiT-Prozess ist, dass die Installation der Datenbank mit LLVM kompiliert ist.

Ein wesentlicher Fokus bei der Optimierung lag auf den B-Baum-Indizes, die die Open-Source-Datenbank standardmäßig zum Indizieren verwendet. Laut den Aussagen des PostgreSQL-Teams ergeben Benchmarks mit dem Online-Transaktionsverarbeitungs-Benchmark (Online Transaction Processing, OLTP) TPC-C einen um durchschnittlich 40 Prozent reduzierten Platzbedarf sowie einen allgemeinen Performancegewinn.

Auch der Indizierungsprozess über GiST (Generalized Search Tree), SP-GiST (Space Partitioned GiST) und GIN (Generalized Inverted Index) bietet eine verbesserte Performance. Zudem erzeugt dabei das Write Ahead Logging (WAL), das Modifikationen im Interesse der Atomarität vor dem Schreiben in die Datenbank protokolliert, weniger Daten. Darüber hinaus dürfen GiST-Indizes neuerdings INCLUDE-Klausel enthalten.

Auch bei den partitionierten Tabellen bringt PostgreSQL 12 Performanceverbesserungen mit. Unter anderem arbeitet das System effizienter, wenn Operationen auf einer Tabelle mit Tausenden Partitionen laufen, aber nur einen kleinen Teil davon betreffen. Auch INSERT und COPY sollen für partitionierte Tabellen performanter arbeiten. Wie bei den Indizes trägt die nebenläufige Verarbeitung bei partitionierten Tabellen zu einem Geschwindigkeitszuwachs bei: ATTACH PARTITION blockiert keine parallel ablaufenden Abfragen.

Datenbankadministratoren können Ausfallzeiten reduzieren, indem sie Indizes über REINDEX CONCURRENTLY erneuern. Das Erstellen des Index erfolgt dabei nebenläufig, sodass es keine Schreibvorgänge blockiert. Neu ist zudem die Option, die Integrität von Offline-Clusters über pg_checksums zu prüfen, was bisher nur beim Initialisieren des Clusters über initdb möglich war.

Zu den nennenswerten Neuerungen für die Verwendung von PostgreSQL gehört die Option, WITH-Abfragen automatisch in andere Queries einzubinden. Allerdings gelten dafür einige Einschränkungen. So dürfen die inline verwendeten Common Table Expressions (CTE) nicht rekursiv sein, keine Nebeneffekte aufweisen und nur genau einmal im weiteren Teil der Abfrage referenziert werden.

Außerdem kann PostgreSQL nun Abfragen auf JSON-Dokumente ausführen. Dazu kommen die SQL/JSON Path Expressions zum Einsatz. Die Ausdrücke sind als jsonpath-Datentyp implementiert. Die Dokumentation von PostgreSQL 12 bietet einen Überblick über den Zugriff.

Eine weitere Neuerung sind die nichtdeterministischen Vergleiche (Nondeterministic Collations) für Zeichenketten. Dabei werden die Strings nicht Byte-weise verglichen, sondern gelten beispielsweise unabhängig von der Groß- und Kleinschreibung als gleich. Eine COLLATION ist standardmäßig deterministisch und lässt sich beim Erstellen über CREATE COLLATION über den Parameter deterministic = false als nichtdeterministisch definieren.

PostgreSQL 12 erweitert die Methoden der Authentifizierung und bietet unter anderem erstmals client- und serverseitige Verschlüsselung für die Verwendung der GSS-API (Generic Security Service Application Program Interface). Außerdem führt das Release die Option ein, Multifaktor-Authentifizierung zu verwenden.

Weitere Neuerungen in PostgreSQL 12 lassen sich der offiziellen Ankündigung entnehmen. Die vollständige Liste der Neuerungen findet sich in den Release Notes. Die Downloadseite bietet den Sourcecode und Binaries für unterschiedliche Betriebssysteme zum Herunterladen. (rme)