mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-01 10:41:18 +02:00
f9463d2a90
Commit 6e654546fb
avoids locking bufmgr partitions to make pg_buffercache
less disruptive on production systems but forgot to update the docs.
Reported-by: Sawada Masahiko
Author: Sawada Masahiko
Reviewed-by: Amit Kapila
Backpatch-through: 10
Discussion: https://postgr.es/m/CA+fd4k6sD8oeP1qJbFAor=rCpYckU9DsywHiYx3x5Hz5Z8Ua_w@mail.gmail.com
193 lines
5.8 KiB
Plaintext
193 lines
5.8 KiB
Plaintext
<!-- doc/src/sgml/pgbuffercache.sgml -->
|
|
|
|
<sect1 id="pgbuffercache" xreflabel="pg_buffercache">
|
|
<title>pg_buffercache</title>
|
|
|
|
<indexterm zone="pgbuffercache">
|
|
<primary>pg_buffercache</primary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
The <filename>pg_buffercache</filename> module provides a means for
|
|
examining what's happening in the shared buffer cache in real time.
|
|
</para>
|
|
|
|
<indexterm>
|
|
<primary>pg_buffercache_pages</primary>
|
|
</indexterm>
|
|
|
|
<para>
|
|
The module provides a C function <function>pg_buffercache_pages</function>
|
|
that returns a set of records, plus a view
|
|
<structname>pg_buffercache</structname> that wraps the function for
|
|
convenient use.
|
|
</para>
|
|
|
|
<para>
|
|
By default, use is restricted to superusers and members of the
|
|
<literal>pg_monitor</literal> role. Access may be granted to others
|
|
using <command>GRANT</command>.
|
|
</para>
|
|
|
|
<sect2>
|
|
<title>The <structname>pg_buffercache</structname> View</title>
|
|
|
|
<para>
|
|
The definitions of the columns exposed by the view are shown in <xref linkend="pgbuffercache-columns"/>.
|
|
</para>
|
|
|
|
<table id="pgbuffercache-columns">
|
|
<title><structname>pg_buffercache</structname> Columns</title>
|
|
|
|
<tgroup cols="4">
|
|
<thead>
|
|
<row>
|
|
<entry>Name</entry>
|
|
<entry>Type</entry>
|
|
<entry>References</entry>
|
|
<entry>Description</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
|
|
<row>
|
|
<entry><structfield>bufferid</structfield></entry>
|
|
<entry><type>integer</type></entry>
|
|
<entry></entry>
|
|
<entry>ID, in the range 1..<varname>shared_buffers</varname></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><structfield>relfilenode</structfield></entry>
|
|
<entry><type>oid</type></entry>
|
|
<entry><literal>pg_class.relfilenode</literal></entry>
|
|
<entry>Filenode number of the relation</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><structfield>reltablespace</structfield></entry>
|
|
<entry><type>oid</type></entry>
|
|
<entry><literal>pg_tablespace.oid</literal></entry>
|
|
<entry>Tablespace OID of the relation</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><structfield>reldatabase</structfield></entry>
|
|
<entry><type>oid</type></entry>
|
|
<entry><literal>pg_database.oid</literal></entry>
|
|
<entry>Database OID of the relation</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><structfield>relforknumber</structfield></entry>
|
|
<entry><type>smallint</type></entry>
|
|
<entry></entry>
|
|
<entry>Fork number within the relation; see
|
|
<filename>include/common/relpath.h</filename></entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><structfield>relblocknumber</structfield></entry>
|
|
<entry><type>bigint</type></entry>
|
|
<entry></entry>
|
|
<entry>Page number within the relation</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><structfield>isdirty</structfield></entry>
|
|
<entry><type>boolean</type></entry>
|
|
<entry></entry>
|
|
<entry>Is the page dirty?</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><structfield>usagecount</structfield></entry>
|
|
<entry><type>smallint</type></entry>
|
|
<entry></entry>
|
|
<entry>Clock-sweep access count</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry><structfield>pinning_backends</structfield></entry>
|
|
<entry><type>integer</type></entry>
|
|
<entry></entry>
|
|
<entry>Number of backends pinning this buffer</entry>
|
|
</row>
|
|
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
|
|
<para>
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
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.
|
|
</para>
|
|
|
|
<para>
|
|
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.
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Sample Output</title>
|
|
|
|
<screen>
|
|
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)
|
|
</screen>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Authors</title>
|
|
|
|
<para>
|
|
Mark Kirkwood <email>markir@paradise.net.nz</email>
|
|
</para>
|
|
|
|
<para>
|
|
Design suggestions: Neil Conway <email>neilc@samurai.com</email>
|
|
</para>
|
|
|
|
<para>
|
|
Debugging advice: Tom Lane <email>tgl@sss.pgh.pa.us</email>
|
|
</para>
|
|
</sect2>
|
|
|
|
</sect1>
|