par Guillaume Lelarge.

Planification forte


PostgreSQL n'a pas de cache partagé pour les plans des requêtes mais il a un cache optionnel de plans de requêtes. Cela signifie que le développeur doit choisir entre utiliser une requête préparée avec ou sans plan en cache. Notez que, de toute façon, le cache est supprimé quand la requête préparée est fermée.

Les exemples suivants montrent comment utiliser cette fonctionnalité dans différents langages.

C

L'API C native fournit la fonction PQexecParams, qui permet d'utiliser des paramètres liés lors de la préparation (en opposition à la fonction PQprepare).

Java

Le connecteur PostgreSQL pour JDBC contrôle la préparation côté serveur via la méthode non standard setPrepareThreshold sur PGStatement et PGConnection.

Notez que la configuration par défaut est de 5, ce qui signifie que les quatre premières exécutions utiliseront les paramètres liés lors de la préparation, mais pas les suivants. Ce compteur recommence à zéro pour chaque instance de PreparedStatement.

Attention

Il existe un grande nombre d'outils qui utilisent un cache PreparedStatement, configuré via prepared-statement-cache-size dans la configuration de la source de données. Cela signifie que vous pouvez atteindre la limite à tout moment.

Ruby

L'instruction PGconn.exec de Ruby accepte les paramètres liés en tant qu'argument optionnel. Les valeurs seront utilisées lors de la préparation si elles sont fournies. Jeff Davis a un exemple.

À propos de l'auteur

Photo de Markus Winand

Markus Winand teaches efficient SQL—inhouse and online. He minimizes the development time using modern SQL and optimizes the runtime with smart indexing—for that he also published the book SQL Performance Explained.

Livre de Markus

Couverture du livre « SQL : Au cœur des performances »

L'essence de SQL tuning dans 200 pages.

Acheter de Markus
(Livre de poche et PDF)

Achetez chez Amazon
(Seulement en poche)

“Use The Index, Luke!” by Markus Winand and translated by Guillaume Lelarge is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Mentions légales | Contact | NO WARRANTY | Marque déposée | Privacy | CC-BY-NC-ND 3.0 license