postgresql/contrib/pageinspect
Robert Haas 293e24e507 Cache hash index's metapage in rel->rd_amcache.
This avoids a very significant amount of buffer manager traffic and
contention when scanning hash indexes, because it's no longer
necessary to lock and pin the metapage for every scan.  We do need
some way of figuring out when the cache is too stale to use any more,
so that when we lock the primary bucket page to which the cached
metapage points us, we can tell whether a split has occurred since we
cached the metapage data.  To do that, we use the hash_prevblkno field
in the primary bucket page, which would otherwise always be set to
InvalidBuffer.

This patch contains code so that it will continue working (although
less efficiently) with hash indexes built before this change, but
perhaps we should consider bumping the hash version and ripping out
the compatibility code.  That decision can be made later, though.

Mithun Cy, reviewed by Jesper Pedersen, Amit Kapila, and by me.
Before committing, I made a number of cosmetic changes to the last
posted version of the patch, adjusted _hash_getcachedmetap to be more
careful about order of operation, and made some necessary updates to
the pageinspect documentation and regression tests.
2017-02-07 12:35:45 -05:00
..
expected Cache hash index's metapage in rel->rd_amcache. 2017-02-07 12:35:45 -05:00
sql pageinspect: Remove platform-dependent values from hash tests. 2017-02-03 11:06:41 -05:00
.gitignore pageinspect: Add tests 2016-11-01 14:02:16 -04:00
Makefile pageinspect: Support hash indexes. 2017-02-02 14:19:32 -05:00
brinfuncs.c In pageinspect/hashfuncs.c, avoid crashes on alignment-picky machines. 2017-02-03 11:34:47 -05:00
btreefuncs.c In pageinspect/hashfuncs.c, avoid crashes on alignment-picky machines. 2017-02-03 11:34:47 -05:00
fsmfuncs.c In pageinspect/hashfuncs.c, avoid crashes on alignment-picky machines. 2017-02-03 11:34:47 -05:00
ginfuncs.c In pageinspect/hashfuncs.c, avoid crashes on alignment-picky machines. 2017-02-03 11:34:47 -05:00
hashfuncs.c pageinspect: More type-sanity surgery on the new hash index code. 2017-02-03 16:28:13 -05:00
heapfuncs.c In pageinspect/hashfuncs.c, avoid crashes on alignment-picky machines. 2017-02-03 11:34:47 -05:00
pageinspect--1.0--1.1.sql Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:37 +02:00
pageinspect--1.1--1.2.sql Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:37 +02:00
pageinspect--1.2--1.3.sql pageinspect/BRIN: minor tweaks 2014-12-02 12:20:50 -03:00
pageinspect--1.3--1.4.sql Add forgotten file in commit d6061f83a1 2015-11-25 16:59:07 +03:00
pageinspect--1.4--1.5.sql Update pageinspect extension for parallel query. 2016-06-09 17:18:09 -04:00
pageinspect--1.5--1.6.sql pageinspect: More type-sanity surgery on the new hash index code. 2017-02-03 16:28:13 -05:00
pageinspect--1.5.sql Update pageinspect extension for parallel query. 2016-06-09 17:18:09 -04:00
pageinspect--unpackaged--1.0.sql Fix typos in some error messages thrown by extension scripts when fed to psql. 2014-08-25 18:30:37 +02:00
pageinspect.control pageinspect: Support hash indexes. 2017-02-02 14:19:32 -05:00
pageinspect.h In pageinspect/hashfuncs.c, avoid crashes on alignment-picky machines. 2017-02-03 11:34:47 -05:00
rawpage.c In pageinspect/hashfuncs.c, avoid crashes on alignment-picky machines. 2017-02-03 11:34:47 -05:00