Movatterモバイル変換


[0]ホーム

URL:



Facebook
Postgres Pro
Facebook
Downloads
F.36. pg_buffercache — inspectPostgres Pro buffer cache state
Prev UpAppendix F. Additional Supplied Modules and Extensions Shipped inpostgrespro-std-17-contribHome Next

F.36. pg_buffercache — inspectPostgres Pro buffer cache state#

Thepg_buffercache module provides a means for examining what's happening in the shared buffer cache in real time. It also offers a low-level way to evict data from it, for testing purposes.

This module provides thepg_buffercache_pages() function (wrapped in thepg_buffercache view), thepg_buffercache_summary() function, thepg_buffercache_usage_counts() function and thepg_buffercache_evict() function.

Thepg_buffercache_pages() function returns a set of records, each row describing the state of one shared buffer entry. Thepg_buffercache view wraps the function for convenient use.

Thepg_buffercache_summary() function returns a single row summarizing the state of the shared buffer cache.

Thepg_buffercache_usage_counts() function returns a set of records, each row describing the number of buffers with a given usage count.

By default, use of the above functions is restricted to superusers and roles with privileges of thepg_monitor role. Access may be granted to others usingGRANT.

Thepg_buffercache_evict() function allows a block to be evicted from the buffer pool given a buffer identifier. Use of this function is restricted to superusers only.

F.36.1. Thepg_buffercache View#

The definitions of the columns exposed by the view are shown inTable F.19.

Table F.19. pg_buffercache Columns

Column Type

Description

bufferidinteger

ID, in the range 1..shared_buffers

relfilenodeoid (referencespg_class.relfilenode)

Filenode number of the relation

reltablespaceoid (referencespg_tablespace.oid)

Tablespace OID of the relation

reldatabaseoid (referencespg_database.oid)

Database OID of the relation

relforknumbersmallint

Fork number within the relation

relblocknumberbigint

Page number within the relation

isdirtyboolean

Is the page dirty?

usagecountsmallint

Clock-sweep access count

pinning_backendsinteger

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 exceptbufferid. Shared system catalogs are shown as belonging to database zero.

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 inpg_class for some rows, or that there could even be incorrect joins. If you are trying to join againstpg_class, it's a good idea to restrict the join to rows havingreldatabase equal to the current database's OID or zero.

Since buffer manager locks are not taken to copy the buffer state data that the view will display, accessingpg_buffercache 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.

F.36.2. Thepg_buffercache_summary() Function#

The definitions of the columns exposed by the function are shown inTable F.20.

Table F.20. pg_buffercache_summary() Output Columns

Column Type

Description

buffers_usedint4

Number of used shared buffers

buffers_unusedint4

Number of unused shared buffers

buffers_dirtyint4

Number of dirty shared buffers

buffers_pinnedint4

Number of pinned shared buffers

usagecount_avgfloat8

Average usage count of used shared buffers


Thepg_buffercache_summary() function returns a single row summarizing the state of all shared buffers. Similar and more detailed information is provided by thepg_buffercache view, butpg_buffercache_summary() is significantly cheaper.

Like thepg_buffercache view,pg_buffercache_summary() does not acquire buffer manager locks. Therefore concurrent activity can lead to minor inaccuracies in the result.

F.36.3. Thepg_buffercache_usage_counts() Function#

The definitions of the columns exposed by the function are shown inTable F.21.

Table F.21. pg_buffercache_usage_counts() Output Columns

Column Type

Description

usage_countint4

A possible buffer usage count

buffersint4

Number of buffers with the usage count

dirtyint4

Number of dirty buffers with the usage count

pinnedint4

Number of pinned buffers with the usage count


Thepg_buffercache_usage_counts() 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 thepg_buffercache view, butpg_buffercache_usage_counts() is significantly cheaper.

Like thepg_buffercache view,pg_buffercache_usage_counts() does not acquire buffer manager locks. Therefore concurrent activity can lead to minor inaccuracies in the result.

F.36.4. Thepg_buffercache_evict() Function#

Thepg_buffercache_evict() function takes a buffer identifier, as shown in thebufferid column of thepg_buffercache view. It returns true on success, and false if the buffer wasn't valid, if it couldn't be evicted because it was pinned, or if it became dirty again after an attempt to write it out. The result is immediately out of date upon return, as the buffer might become valid again at any time due to concurrent activity. The function is intended for developer testing only.

F.36.5. Sample Output#

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.36.6. Authors#

Mark Kirkwood<markir@paradise.net.nz>

Design suggestions: Neil Conway<neilc@samurai.com>

Debugging advice: Tom Lane<tgl@sss.pgh.pa.us>


Prev Up Next
F.35. passwordcheck — verify password strength Home F.37. pgcrypto — cryptographic functions
pdfepub
Go to Postgres Pro Standard 17
By continuing to browse this website, you agree to the use of cookies. Go toPrivacy Policy.

[8]ページ先頭

©2009-2025 Movatter.jp