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

Dans Oracle, les instructions SQL seront mises en cache dans shared_pool, et les données fréquemment sélectionnées seront mises en cache dans db_cache.

Que fait PostgreSQL? Les instructions SQL et les données seront-elles mises en cache dans shared_buffers?

28
demandé sur Michael Petrotta 2011-08-22 05:23:31

1 réponses

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'assurer que cela 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 par lettre, et qu'aucune mise à jour n'a été effectuée sur la base de données-elle exécutera tout le plan. Il sera, bien sûr, faire de utilisation de toutes les données de table/index qui sont déjà dans le cache des tampons partagés; il n'aura donc pas nécessairement à lire toutes les données du disque à nouveau.

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 rend le plan peut utiliser la version mise en cache. D'autres connexions doivent créer et utiliser leurs propres versions mises en cache. Ce n'est pas vraiment un problème de performance car les économies que vous obtenez en réutilisant un plan sont presque toujours minimes par rapport au coût de connexion de toute façon. (Sauf si vos requêtes sont vraiment compliquées.)

Il ne cache si vous utilisez PRÉPARER: http://www.postgresql.org/docs/current/static/sql-prepare.html

It 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

It ne met pas en cache les requêtes ad hoc saisies psql.

Espérons que quelqu'un d'autre peut élaborer sur d'autres cas de mise en cache du plan de requête.

37
répondu Edmund 2011-08-22 06:11:55