PostgreSQL 11: Open-Source-Datenbank mit Just-in-Time-Kompilierung

PostgreSQL 11 bringt viele Verbesserungen in Sachen Geschindigkeit und Usability mit. Richtig spannend ist die neue Just-in-Time-Kompilierung der Datenbank.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht
PostgreSQL 11: Open-Source-Datenbank mit Just-in-Time-Kompilierung
Lesezeit: 17 Min.
Von
  • Daniel Bößwetter
  • Robert Wunderer
Inhaltsverzeichnis

PostgreSQL ist eine der am weitesten verbreiteten Open-Source-Datenbanken. Im Herbst 2018 erschien mit Version 11 das jüngste Major Release. Eins der herausragendsten Features von PostgreSQL 11 ist die Just-in-Time-Kompilierung (JIT), das die Datenbank auch von ihren Mitbewerbern absetzt. Die Datenbank übersetzt dabei Teile von Anfragen unmittelbar vor der Ausführung (just in time) in Maschinencode, um sie performanter zu machen.

Das klingt gut, hat jedoch einen Haken: Die Kompilierung und gegebenenfalls die anschließende Optimierung kosten Zeit. So lohnt sich das Verfahren nur für lang laufende, meist analytische Leseanfragen, die außerdem CPU-bound sind. Für kurze Transaktionen hingegen bedeutet JIT ungewollten Overhead. Daher ist dieses Feature so in den Planner der Datenbank integriert, dass es überhaupt nur dann anspringt, wenn die vom Optimizer geschätzten Kosten einer Anfrage ein konfigurierbares Limit übersteigen. Das Kommando EXPLAIN gibt den Ausführungsplan inklusive Kosten aus und zeigt auch, ob die JIT-Kompilierung zum Einsatz kommt. Es gibt noch zwei weitere Kostenlimits, die in der Folge bestimmen, ob Funktionen inline in den Code eingebaut werden und ob der verwendete LLVM-Compiler auch optimieren soll (beides nimmt zusätzlich Zeit in Anspruch).

Verwendung findet die JIT-Kompilierung bei Ausdrücken in der SELECT-Liste und in WHERE-Klauseln, bei Aggregation sowie beim "Tuple Deforming" – also während der Transformation der Zeilen von ihrem On-Disk- in ihr In-Memory-Format. Die Postgres-Spezialisten von Citus Data testeten die neue JIT-Kompilierung in einer Pre-Release von PostgreSQL 11 mit der ersten Query des TPC-H Benchmarks. Dort zeigte sie etwa 30 Prozent schnellere Antwortzeiten. Citus vergleicht allerdings PostgreSQL 10 ohne JIT mit PostgreSQL 11 mit JIT. In unseren Tests trat PostgreSQL 11 ohne JIT gegen Version 11 mit JIT an. Hier fiel der JIT-Geschwindigkeitsvorteil deutlich geringer aus (30 s zu 35 s).