Datenbank: PostgreSQL 13 optimiert Indizes und Aufräumarbeiten

Die Open-Source-Datenbank führt Deduplikation für die Inhalte des Index und paralleles Vacuuming ein. Außerdem kann sie inkrementell sortieren.

Lesezeit: 2 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 11 Beiträge
Von
  • Rainald Menge-Sonnentag

Gut vier Monate nach der ersten Beta ist nun das Release von PostgreSQL 13 erschienen. Die Neuerungen zielen vor allem auf eine verbesserte Performance. Unter anderem bringt PostgreSQL 13 eine Deduplikation für den B-Baum-Index mit und nutzt für Abfragen eine inkrementelle Sortierung und erweiterte Statistiken.

Die Optimierung des B-Baum-Index, den die Datenbank standardmäßig zum Indizieren verwendet, war bereits ein zentraler Punkt der Entwicklung von PostgreSQL 12. Version 13 sucht und entfernt nun doppelte Indexeinträge. Der B-Baum-Index enthält potenziell Blätter mit identischen Schlüsseln für unterschiedliche Tabellenzeilen.

Der Deduplikationsvorgang führt regelmäßig die Duplikate zu Einheiten zusammen, die neben dem Schlüssel ein sortiertes Array der Tuple IDs enthalten, die wiederum auf die Tabellenzeilen verweisen. Die Deduplikation verringert einerseits den Speicherbedarf und führt zudem potenziell zu einer verbesserten Performance bei Abfragen.

Der Deduplikationsprozess erfolgt verzögert (lazy), also nicht direkt beim Einfügen doppelter Einträge wie beim Verwalten des GIN-Index (Genralized Inverted), der Duplikate automatisch zusammenfasst. Schreibintensive Datenbankanwendungen kann der Prozess dennoch potenziell ausbremsen, weshalb sich die Deduplikation über den Parameter deduplicate_items deaktivieren lässt.

Abfragen können neuerdings inkrementelle Sortierung verwenden: Die Datenbank bezieht sortierte Daten aus einem früheren Schritt der Query später wieder mit ein, um die weitere Sortierung zu beschleunigen.

Außerdem nutzt PostgreSQL für Abfragen Statistiken, die mit dem CREATE STATISTICS-Befehl erstellt wurden. Damit kann die Datenbank verknüpfte Queries optimieren, in denen es Korrelation zwischen unterschiedlichen Spalten zu erkennen versucht.

Außerdem sollen Abfragen, die partitionierte Tabellen einbeziehen, in PostgreSQL 13 effizienter sein, da die Datenbank dafür einzelne Partitionen zurechtstutzt oder mehrere partitionierte Tabellen verknüpft.

Administratoren können in PostgreSQL über VACUUM den Speicher aufräumen: Der Befehl entfernt ungenutzte Tupel. Üblicherweise bleiben die Tupel nach dem Löschen physisch in der Tabelle und belegen damit bis zum Aufräumen Platz. Version 13 der Datenbank kann neuerdings parallel Index-Vacuum und Index-Cleanups ausführen.

Letzteres dient über den VACUUM-Parameter INDEX_CLEANUP zum Entfernen von Indexeinträgen, die auf ungenutzte Tupel zeigen. Über den Parameter PARALLEL lässt sich die Zahl der Hintergrundprozesse für das Aufräumen festlegen.

Eine weitere administrative Neuerung ist, dass sich die Größe der für den Write-Ahead Log (WAL) genutzten Replication Slots über den Parameter max_slot_wal_keep_size begrenzen lässt.

Einige Neuerungen zielen vor allem auf Softwareentwickler, die PostgreSQL-Datenbanken nutzen. Unter anderem erzeugt die datetime()-Methode aus einem Datum, das beispielsweise nach ISO 8601 formatiert ist, das passende Format für ein Datumsfeld. Außerdem lässt sich die Funktion gen_random_uuid() zum Erstellen eines zufälligen Unique Identifier (UUID) nutzen, ohne zuvor eine Erweiterung zu installieren.

Hinsichtlich der Extensions können Supersuser neuerdings Erweiterungen als trusted deklarieren. Anschließend dürfen auch reguläre Anwender, die Rechte zum Nutzen von CREATE haben, die entsprechend gekennzeichneten Extension installieren. Bisher war die Installation grundsätzlich Supersusern vorbehalten.

Weitere Neuerungen in PostgreSQL 13 wie das flexiblere Partitionssystem und die erweiterten Aggregatfunktionen 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)