バージョンごとのドキュメント一覧

F.27. pg_buffercache — PostgreSQLのバッファキャッシュの状態を確認する #

<title>pg_buffercache &mdash; inspect <productname>PostgreSQL</productname> buffer cache state</title>

The <filename>pg_buffercache</filename> module provides a means for examining what's happening in the shared buffer cache in real time. pg_buffercacheモジュールは、共有バッファキャッシュで何が起きているかをリアルタイムに確認する方法を提供します。

This module provides the <function>pg_buffercache_pages()</function> function (wrapped in the <structname>pg_buffercache</structname> view), the <function>pg_buffercache_summary()</function> function, and the <function>pg_buffercache_usage_counts()</function> function. このモジュールは、pg_buffercache_pages()関数(pg_buffercacheビューでラップされています)、pg_buffercache_summary()関数、およびpg_buffercache_usage_counts()関数を提供します。

The <function>pg_buffercache_pages()</function> function returns a set of records, each row describing the state of one shared buffer entry. The <structname>pg_buffercache</structname> view wraps the function for convenient use. pg_buffercache_pages()関数は、各行が1つの共有バッファエントリの状態を記述するレコード集合を返します。 pg_buffercacheビューは、簡単に利用できるようにこの関数をラップしています。

The <function>pg_buffercache_summary()</function> function returns a single row summarizing the state of the shared buffer cache. pg_buffercache_summary()関数は、共有バッファキャッシュの状態を要約した1行を返します。

The <function>pg_buffercache_usage_counts()</function> function returns a set of records, each row describing the number of buffers with a given usage count. pg_buffercache_usage_counts()関数は、各行が対応する使用カウントを持つバッファの数を記述するレコード集合を返します。

By default, use is restricted to superusers and roles with privileges of the <literal>pg_monitor</literal> role. Access may be granted to others using <command>GRANT</command>. デフォルトでは、使用はスーパーユーザとpg_monitorロールの権限を持つロールに限定されています。 GRANTを使って他人にアクセス権を付与できます。

F.27.1. pg_buffercacheビュー #

<title>The <structname>pg_buffercache</structname> View</title>

The definitions of the columns exposed by the view are shown in <xref linkend="pgbuffercache-columns"/>. ビューによって公開されている列の定義を表 F.15に示します。

表F.15 pg_buffercacheの列

<title><structname>pg_buffercache</structname> Columns</title>

Column Type 列 型

Description 説明

bufferid integer

ID, in the range 1..<varname>shared_buffers</varname> 1からshared_buffersまでの範囲で示されるID

relfilenode oid (references <link linkend="catalog-pg-class"><structname>pg_class</structname></link>.<structfield>relfilenode</structfield>) (参照先 pg_class.relfilenode

Filenode number of the relation リレーションのファイルノード番号

reltablespace oid (references <link linkend="catalog-pg-tablespace"><structname>pg_tablespace</structname></link>.<structfield>oid</structfield>) (参照先 pg_tablespace.oid

Tablespace OID of the relation リレーションのテーブル空間OID

reldatabase oid (references <link linkend="catalog-pg-database"><structname>pg_database</structname></link>.<structfield>oid</structfield>) (参照先 pg_database.oid

Database OID of the relation リレーションのデータベースOID

relforknumber smallint

Fork number within the relation; see <filename>common/relpath.h</filename> リレーション内のフォーク番号。common/relpath.h参照

relblocknumber bigint

Page number within the relation リレーション内のページ番号

isdirty boolean

Is the page dirty? ダーティページかどうか

usagecount smallint

Clock-sweep access count Clock-sweepアクセスカウント

pinning_backends integer

Number of backends pinning this buffer このバッファをピン留めしているバックエンドの数


There is one row for each buffer in the shared cache. Unused buffers are shown with all fields null except <structfield>bufferid</structfield>. Shared system catalogs are shown as belonging to database zero. 共有キャッシュ内の各バッファに対して、1行が存在します。 未使用のバッファは、bufferidを除き、すべてのフィールドがNULLになります。 共有システムカタログは、OIDがゼロのデータベースに属するものとして表示されます。

Because the cache is shared by all the databases, there will normally be pages from relations not belonging to the current database. This means that there may not be matching join rows in <structname>pg_class</structname> for some rows, or that there could even be incorrect joins. If you are trying to join against <structname>pg_class</structname>, it's a good idea to restrict the join to rows having <structfield>reldatabase</structfield> equal to the current database's OID or zero. キャッシュはすべてのデータベースで共有されているため、現在のデータベースに属さないリレーションのページも表示されます。 これは、一部の行に対して一致するpg_classの結合行が存在しない、間違った結合をしてしまう可能性すらあることを意味します。 pg_classに対して結合しようとする場合、現在のデータベースのOIDまたは0と等しいreldatabaseを持つ行に限定して結合することをお勧めします。

Since buffer manager locks are not taken to copy the buffer state data that the view will display, accessing <structname>pg_buffercache</structname> view has less impact on normal buffer activity but it doesn't provide a consistent set of results across all buffers. However, we ensure that the information of each buffer is self-consistent. ビューが表示するバッファ状態データのコピーのために、バッファマネージャのロックを取得しません。このため、pg_buffercacheビューへのアクセスは、通常のバッファ処理への影響がより小さくなりますが、バッファすべてに渡る矛盾のない結果を提供しません。 しかしながら、各バッファの情報に自己矛盾がないことは保証されます。

F.27.2. pg_buffercache_summary()関数 #

<title>The <function>pg_buffercache_summary()</function> Function</title>

The definitions of the columns exposed by the function are shown in <xref linkend="pgbuffercache-summary-columns"/>. 関数によって公開されている列の定義を表 F.16に示します。

表F.16 pg_buffercache_summary()出力列

<title><function>pg_buffercache_summary()</function> Output Columns</title>

Column Type 列 型

Description 説明

buffers_used int4

Number of used shared buffers 使用中の共有バッファの数

buffers_unused int4

Number of unused shared buffers 未使用の共有バッファの数

buffers_dirty int4

Number of dirty shared buffers ダーティ共有バッファの数

buffers_pinned int4

Number of pinned shared buffers 固定された共有バッファの数

usagecount_avg float8

Average usage count of used shared buffers 使用中の共有バッファの平均使用カウント


The <function>pg_buffercache_summary()</function> function returns a single row summarizing the state of all shared buffers. Similar and more detailed information is provided by the <structname>pg_buffercache</structname> view, but <function>pg_buffercache_summary()</function> is significantly cheaper. pg_buffercache_summary()関数は、すべての共有バッファの状態を要約した単一の行を返します。 同様の、より詳細な情報はpg_buffercacheビューによって提供されますが、pg_buffercache_summary()はかなり安価です。

Like the <structname>pg_buffercache</structname> view, <function>pg_buffercache_summary()</function> does not acquire buffer manager locks. Therefore concurrent activity can lead to minor inaccuracies in the result. pg_buffercacheビューと同様に、pg_buffercache_summary()はバッファマネージャのロックを取得しません。 そのため、同時実行中の処理によって結果に小さな不正確さが生じる可能性があります。

F.27.3. The pg_buffercache_usage_counts() Function #

The definitions of the columns exposed by the function are shown in <xref linkend="pgbuffercache_usage_counts-columns"/>. 関数によって公開されている列の定義を表 F.17に示します。

表F.17 pg_buffercache_usage_counts()出力列

<title><function>pg_buffercache_usage_counts()</function> Output Columns</title>

Column Type 列 型

Description 説明

usage_count int4

A possible buffer usage count 推定バッファ使用カウント

buffers int4

Number of buffers with the usage count その使用カウントのバッファの数

dirty int4

Number of dirty buffers with the usage count その使用カウントのダーティバッファの数

pinned int4

Number of pinned buffers with the usage count その使用カウントの固定されたバッファの数


The <function>pg_buffercache_usage_counts()</function> function returns a set of rows summarizing the states of all shared buffers, aggregated over the possible usage count values. Similar and more detailed information is provided by the <structname>pg_buffercache</structname> view, but <function>pg_buffercache_usage_counts()</function> is significantly cheaper. pg_buffercache_usage_counts()関数は、すべての共有バッファの状態を要約した行の集合を返します。これは、推定使用カウント値に基づいて集計されます。 同様の、より詳細な情報はpg_buffercacheビューによって提供されますが、pg_buffercache_usage_counts()はかなり安価です。

Like the <structname>pg_buffercache</structname> view, <function>pg_buffercache_usage_counts()</function> does not acquire buffer manager locks. Therefore concurrent activity can lead to minor inaccuracies in the result. pg_buffercacheビューと同様に、pg_buffercache_usage_counts()はバッファマネージャのロックを取得しません。 そのため、同時実行中の処理によって結果に小さな不正確さが生じる可能性があります。

F.27.4. サンプル出力 #

<title>Sample Output</title>
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)


regression=# SELECT * FROM pg_buffercache_summary();
 buffers_used | buffers_unused | buffers_dirty | buffers_pinned | usagecount_avg
--------------+----------------+---------------+----------------+----------------
          248 |        2096904 |            39 |              0 |       3.141129
(1 row)


regression=# SELECT * FROM pg_buffercache_usage_counts();
 usage_count | buffers | dirty | pinned
-------------+---------+-------+--------
           0 |   14650 |     0 |      0
           1 |    1436 |   671 |      0
           2 |     102 |    88 |      0
           3 |      23 |    21 |      0
           4 |       9 |     7 |      0
           5 |     164 |   106 |      0
(6 rows)

F.27.5. 作者 #

<title>Authors</title>

Mark Kirkwood

Design suggestions: Neil Conway <email>neilc@samurai.com</email> 設計協力: Neil Conway

Debugging advice: Tom Lane <email>tgl@sss.pgh.pa.us</email> デバッグのアドバイス: Tom Lane