Comment PostgreSQL cache d'instructions et de données?
Dans Oracle, SQL seront mis en cache dans shared_pool, et des données qui est souvent mis en cache dans db_cache.
Ce n'PostgreSQL faire? Va SQL et des données mises en cache dans shared_buffers?
Vous devez vous connecter pour publier un commentaire.
Généralement, seul le contenu de la table et les fichiers d'index seront mis en cache dans la mémoire tampon partagée de l'espace.
Les plans de requête sont mis en cache dans certaines circonstances. La meilleure façon d'y parvenir est de PRÉPARER la requête, une fois, puis l'EXÉCUTER à chaque fois.
Les résultats d'une requête ne sont pas automatiquement mises en cache. Si vous exécutez à nouveau la même requête, même si c'est une lettre-par-lettre identique, et pas de mises à jour ont été effectuées sur la DB -- il exécute tout de même que l'ensemble du plan. Il sera, bien sûr, faire usage de n'importe quelle table/index données qui sont déjà dans la mise en commun des tampons cache; de sorte qu'il ne sera pas nécessairement avoir à lire toutes les données à partir du disque de nouveau.
Mise à jour sur le plan de la mise en cache
Plan de mise en cache se fait généralement par session. Cela signifie que seule la connexion qui a fait le plan, vous pouvez utiliser la version en cache. Les autres connexions ont à faire et d'utiliser leurs propres versions mises en cache. Ce n'est pas vraiment un problème de performance car la sauvegarde que vous obtenez à partir de la réutilisation d'un plan est presque toujours minuscule par rapport au coût de la connexion de toute façon. (À moins que vos requêtes sont vraiment compliqué.)
Il ne cache si vous utilisez PRÉPARER: http://www.postgresql.org/docs/current/static/sql-prepare.html
Il ne cache lorsque la requête est dans une PL/plSQL fonction: http://www.postgresql.org/docs/current/static/plpgsql-implementation.html#PLPGSQL-PLAN-CACHING
Il ne pas cache de requêtes ad-hoc est entré dans psql.
J'espère que quelqu'un d'autre peut élaborer sur un autre cas d'un plan de requête de mise en cache.
pg_prepared_statements
montrera les instructions pour la connexion en cours.