From ba0a198fb133eb3426bffdc2e369cce1bafe1612 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Tue, 8 Mar 2016 08:38:50 -0500 Subject: Add pg_visibility contrib module. This lets you examine the visibility map as well as page-level visibility information. I initially wrote it as a debugging aid, but was encouraged to polish it for commit. Patch by me, reviewed by Masahiko Sawada. Discussion: 56D77803.6080503@BlueTreble.com --- doc/src/sgml/contrib.sgml | 1 + doc/src/sgml/filelist.sgml | 1 + doc/src/sgml/pgvisibility.sgml | 110 +++++++++++++++++++++++++++++++++++++++++ doc/src/sgml/storage.sgml | 5 ++ 4 files changed, 117 insertions(+) create mode 100644 doc/src/sgml/pgvisibility.sgml (limited to 'doc/src') diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml index 1b3d2d93c75..4e3f3371251 100644 --- a/doc/src/sgml/contrib.sgml +++ b/doc/src/sgml/contrib.sgml @@ -132,6 +132,7 @@ CREATE EXTENSION module_name FROM unpackaged; &pgstatstatements; &pgstattuple; &pgtrgm; + &pgvisibility; &postgres-fdw; &seg; &sepgsql; diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml index a12fee73db3..30adecee367 100644 --- a/doc/src/sgml/filelist.sgml +++ b/doc/src/sgml/filelist.sgml @@ -136,6 +136,7 @@ + diff --git a/doc/src/sgml/pgvisibility.sgml b/doc/src/sgml/pgvisibility.sgml new file mode 100644 index 00000000000..6a98b55949e --- /dev/null +++ b/doc/src/sgml/pgvisibility.sgml @@ -0,0 +1,110 @@ + + + + pg_visibility + + + pg_visibility + + + + The pg_visibility module provides a means for examining the + visibility map (VM) and page-level visibility information. + + + + These routines return information about three different bits. The + all-visible bit in the visibility map indicates that every tuple on + a given page of a relation is visible to every current transaction. The + all-frozen bit in the visibility map indicates that every tuple on the + page is frozen; that is, no future vacuum will need to modify the page + until such time as a tuple is inserted, updated, deleted, or locked on + that page. The page-level PD_ALL_VISIBLE bit has the + same meaning as the all-visible bit in the visibility map, but is stored + within the data page itself rather than a separate data tructure. These + will normally agree, but the page-level bit can sometimes be set while the + visibility map bit is clear after a crash recovery; or they can disagree + because of a change which occurs after pg_visibility examines + the visibility map and before it examines the data page. + + + + Functions which display information about PG_ALL_VISIBLE + are much more costly than those which only consult the visibility map, + because they must read the relation's data blocks rather than only the + (much smaller) visibility map. + + + + Functions + + + + pg_visibility_map(regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean) returns record + + + Returns the all-visible and all-frozen bits in the visibility map for + the given block of the given relation. + + + + + + pg_visibility(regclass, blkno bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns record + + + Returns the all-visible and all-frozen bits in the visibility map for + the given block of the given relation, plus the + PD_ALL_VISIBILE bit for that block. + + + + + + pg_visibility_map(regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean) returns record + + + Returns the all-visible and all-frozen bits in the visibility map for + each block the given relation. + + + + + + pg_visibility(regclass, blkno OUT bigint, all_visible OUT boolean, all_frozen OUT boolean, pd_all_visible OUT boolean) returns record + + + + Returns the all-visible and all-frozen bits in the visibility map for + each block the given relation, plus the PD_ALL_VISIBLE + bit for each block. + + + + + + pg_visibility_map_summary(regclass, all_visible OUT bigint, all_frozen OUT bigint) returns record + + + + Returns the number of all-visible pages and the number of all-frozen + pages in the relation according to the visibility map. + + + + + + + By default, these functions are not publicly executable. + + + + + Author + + + Robert Haas rhaas@postgresql.org + + + + diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml index e2be43e63df..9b2e09e3857 100644 --- a/doc/src/sgml/storage.sgml +++ b/doc/src/sgml/storage.sgml @@ -648,6 +648,11 @@ might not be true. Visibility map bits are only set by vacuum, but are cleared by any data-modifying operations on a page. + +The module can be used to examine the +information stored in the visibility map. + + -- cgit v1.2.3