von Markus Winand.

Konkrete Werte und der Query Plan Cache


PostgreSQL hat keinen globalen Cache für Ausführungspläne. Stattdessen gibt es einen optionalen Cache für prepared Statements. Das bedeutet, dass der Entwickler die Wahl hat, den Ausführungsplan für ein prepared Statement zu cachen, oder nicht. Der Cache wird auf jeden Fall verworfen, wenn das prepared Statement geschlossen wird.

Die folgenden Beispiele zeigen, wie man diese Funktionalität benutzt:

C

Die native C API stellt die Funktion PQexecParams zur Verfügung. Damit kann man schon während des PREPARE Schrittes konkrete Werte angeben, die bei der Erstellung des Ausführungsplanes berücksichtigt werden.

Java

Beim PostgreSQL JDBC Trieiber kann man server-seitiges PEPARE mit der proprietären Funktion setPrepareThreshold von PGStatement und PGConnection einstellen.

Beachte, dass der Wert standardmäßig fünf ist. Das bewirkt, dass die ersten vier Ausführungen die konkreten Werte benutzen, die weiteren Ausführungen dann nicht mehr. Das ganze geht wieder von vorne los, wenn ein neues PreparedStatement Objekt verwendet wird.

Warnung

Einige Ausführungsumgebungen (Application Server) verwenden einen PreparedStatement Cache (z.B., mittels prepared-statement-cache-size in der data-source Konfiguration). Dadurch verliert der Entwickler womöglich die Kontrolle über die PreparedStatement Instanzen, sodass das Limit jederzeit zuschlagen könnte.

Ruby

Ruby's PGconn.exec erwartet die konkreten Werte als optionales Argument. Falls vorhanden, werden diese Werte beim Erstellen des Ausführungsplanes benutzt. Jeff Davis hat ein Beispiel dazu gemacht.

Über den Autor

Foto von Markus Winand

Markus Winand lehrt effizientes SQL – inhouse und online. Er minimiert die Entwicklungszeit durch modernes SQL und optimiert die Laufzeit durch schlaue Indizierung – dazu hat er auch das Buch SQL Performance Explained veröffentlicht.

Kaufen Sie sein Buch bei Amazon

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Bei Amazon kaufen
(Taschenbuch)

Taschenbuch und PDF auch auf Markus' Webseite erhältlich.

Holen Sie sich Markus

…für ein Training ins Büro.

Sein beliebtes Training stimmt Entwickler auf SQL Performance ein.

Erfahren Sie mehr»

„Use The Index, Luke!“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz | CC-BY-NC-ND 3.0 Lizenz