F.19. pg_buffercache

pg_buffercacheモジュールは、実時間で共有バッファキャッシュで何が起きているかを確認する方法を提供します。

このモジュールはレコード集合を返すpg_buffercache_pages C関数と、簡便に利用できるようにこの関数を包み隠すpg_buffercacheビューを提供します。

デフォルトでは、潜在的なセキュリティ問題がありますので、どちらに対してもPUBLICアクセスは取り除かれています。

F.19.1. pg_buffercacheビュー

ビューにより公開される列の定義を以下に示します。

表 F-17. pg_buffercacheの列

名前参照説明
bufferidinteger ID。1からshared_buffersまでの範囲
relfilenodeoidpg_class.relfilenodeリレーションのRelfilenode
reltablespaceoidpg_tablespace.oidリレーションのテーブル空間のOID
reldatabaseoidpg_database.oidリレーションのデータベースのOID
relblocknumberbigint リレーション内のページ番号
isdirtyboolean ダーティページかどうか
usagecountsmallint ページのLRU数

共有キャッシュ内の各バッファに対して1行が存在します。 未使用のバッファはbufferidを除きすべてのフィールドはNULLになります。 共有システムカタログはゼロデータベースに属するものとして表示されます。

キャッシュはすべてのデータベースで共有されているため、通常現在のデータベースに属さないリレーションによるページが存在します。 これは、一部の行に対して一致するpg_classの結合行が存在しない、最悪間違った結合をしてしまう可能性があることを意味します。 pg_classに対して結合しようとする場合、現在のデータベースのOIDまたは0と等しいreldatabaseを持つ行に限定して結合することは良い考えです。

pg_buffercacheビューにアクセスがあると、内部バッファマネージャはビューが表示するすべてのバッファ状態をコピーするために十分な期間ロックを取得します。 これにより、一貫した結果集合が生成されること、また、必要以上に長く通常のバッファ操作がブロックされないことが保証されます。 それにも関わらず、このビューが頻繁に読み取られると、データベース性能に多少影響が発生する可能性があります。

F.19.2. サンプル出力

  regression=# SELECT c.relname, count(*) AS buffers
               FROM pg_buffercache b INNER JOIN pg_class c
               ON b.relfilenode = c.relfilenode AND
                  b.reldatabase IN (0, (SELECT oid FROM pg_database
                                        WHERE datname = current_database()))
               GROUP BY c.relname
               ORDER BY 2 DESC LIMIT 10;
               relname             | buffers
  ---------------------------------+---------
   tenk2                           |     345
   tenk1                           |     141
   pg_proc                         |      46
   pg_class                        |      45
   pg_attribute                    |      43
   pg_class_relname_nsp_index      |      30
   pg_proc_proname_args_nsp_index  |      28
   pg_attribute_relid_attnam_index |      26
   pg_depend                       |      22
   pg_depend_reference_index       |      20
  (10 rows)
  

F.19.3. 作者

Mark Kirkwood

設計補助: Neil Conway

デバッグにおける忠告: Tom Lane

アダルトレンタルサーバー