PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 14.11 » Annexes » Modules supplémentaires fournis » pg_buffercache

F.25. pg_buffercache

Le module pg_buffercache fournit un moyen pour examiner ce qui se passe dans le cache partagé en temps réel.

Ce module propose une fonction C, pg_buffercache_pages, qui renvoie un ensemble d'enregistrements, ainsi qu'une vue, pg_buffercache, qui englobe la fonction pour une utilisation facilitée.

Par défaut l'utilisation est restreinte aux super-utilisateurs et aux membres du rôle pg_monitor. L'accès peut être accordé à d'autres rôle en utilisant GRANT.

F.25.1. La vue pg_buffercache

Voici la définition des colonnes exposées par la vue affichée dans Tableau F.15 :

Tableau F.15. Colonnes de pg_buffercache

Type de la colonne

Description

bufferid integer

ID, qui va de 1 à shared_buffers

relfilenode oid (references pg_class.relfilenode)

Numéro filenode de la relation

reltablespace oid (references pg_tablespace.oid)

OID du tablespace de la relation

reldatabase oid (references pg_database.oid)

OID de la base de données de la relation

relforknumber smallint

Numéro du fork dans la relation ; voir common/relpath.h

relblocknumber bigint

Numéro de page dans la relation

isdirty boolean

Page modifiée ?

usagecount smallint

Compteur d'accès clock-sweep

pinning_backends integer

Nombre de processus serveur en accès sur ce bloc


Il y a une ligne pour chaque tampon dans le cache partagé. Les tampons inutilisés sont affichés avec des champs NULL sauf pour bufferid. Les catalogues systèmes partagés sont affichés comme appartenant à la base de données zéro.

Comme le cache est partagé par toutes les bases de données, il y aura des pages de relations n'appartenant pas à la base de données courante. Cela signifie qu'il pourrait y avoir des lignes sans correspondance dans pg_class, ou qu'il pourrait y avoir des jointures incorrectes. Si vous essayez une jointure avec pg_class, une bonne idée est de restreindre la jointure aux lignes ayant un reldatabase égal à l'OID de la base de données actuelle ou à zéro.

Comme des verrous du gestionnaire de tampons ne sont pas acquis pour copier les données d'état du tampon que la vue affichera, accéder à la vue pg_buffercache a moins d'impact sur l'activité normale du tampon mais il ne fournit pas un ensemble cohérent de résultats sur tous les tampons. Néanmoins, nous nous assurons que l'information de chaque tampon est cohérent avec lui-même.

F.25.2. Affichage en sortie

  regression=# SELECT n.nspname, c.relname, count(*) AS buffers
               FROM pg_buffercache b JOIN pg_class c
               ON b.relfilenode = pg_relation_filenode(c.oid) AND
                  b.reldatabase IN (0, (SELECT oid FROM pg_database
                                        WHERE datname = current_database()))
               JOIN pg_namespace n ON n.oid = c.relnamespace
               GROUP BY n.nspname, c.relname
               ORDER BY 3 DESC
               LIMIT 10;

  nspname   |        relname         | buffers
------------+------------------------+---------
 public     | delete_test_table      |     593
 public     | delete_test_table_pkey |     494
 pg_catalog | pg_attribute           |     472
 public     | quad_poly_tbl          |     353
 public     | tenk2                  |     349
 public     | tenk1                  |     349
 public     | gin_test_idx           |     306
 pg_catalog | pg_largeobject         |     206
 public     | gin_test_tbl           |     188
 public     | spgist_text_tbl        |     182
  (10 rows)
  

F.25.3. Auteurs

Mark Kirkwood

Suggestions de conception : Neil Conway

Conseils pour le débogage : Tom Lane