PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment PostgreSQL met-il en cache les instructions et les données ?

Généralement, seul le contenu des fichiers de table et d'index sera mis en cache dans l'espace tampon partagé.

Les plans de requête sont mis en cache dans certaines circonstances. La meilleure façon de s'en assurer est de PRÉPARER la requête une fois, puis de l'EXÉCUTER à chaque fois.

Les résultats d'une requête ne sont pas automatiquement mis en cache. Si vous réexécutez la même requête - même si elle est identique lettre pour lettre et qu'aucune mise à jour n'a été effectuée sur la base de données - elle exécutera toujours l'ensemble du plan. Il utilisera, bien sûr, toutes les données de table/index qui se trouvent déjà dans le cache des tampons partagés ; il n'aura donc pas nécessairement à relire toutes les données du disque.

Mise à jour sur la mise en cache du plan

La mise en cache du plan est généralement effectuée par session. Cela signifie que seule la connexion qui établit le plan peut utiliser la version mise en cache. Les autres connexions doivent créer et utiliser leurs propres versions mises en cache. Ce n'est pas vraiment un problème de performances car l'économie que vous obtenez en réutilisant un plan est presque toujours minime par rapport au coût de la connexion de toute façon. (Sauf si vos requêtes sont vraiment compliqué.)

Ça fait cache si vous utilisez PREPARE :http://www.postgresql.org /docs/current/static/sql-prepare.html

Ça fait cache lorsque la requête est dans une fonction PL/plSQL :http://www.postgresql.org/docs/current/static/plpgsql-implementation.html#PLPGSQL-PLAN-CACHING

Ce n'est pas cache les requêtes ad hoc saisies dans psql.

J'espère que quelqu'un d'autre pourra élaborer sur d'autres cas de mise en cache du plan de requête.