

  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 superutilisateurs et aux rôles
  disposant des attributs du rôle pg_monitor. L'accès peut
  être accordé à d'autres rôle en utilisant GRANT.
 
pg_buffercacheVoici 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 | 
|---|
| 
         
        ID, qui va de 1 à  | 
| 
         Numéro filenode de la relation | 
| 
         OID du tablespace de la relation | 
| 
         OID de la base de données de la relation | 
| 
         
        Numéro du fork dans la relation ; voir
         | 
| 
         Numéro de page dans la relation | 
| 
         Page modifiée ? | 
| 
         Compteur d'accès clock-sweep | 
| 
         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érente avec lui-même.
  
  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)
  
   Mark Kirkwood <markir@paradise.net.nz>
  
   Suggestions de conception : Neil Conway <neilc@samurai.com>
  
   Conseils pour le débogage : Tom Lane <tgl@sss.pgh.pa.us>