postgresql/src/include/access
Alvaro Herrera c0db1ec260 Avoid pin scan for replay of XLOG_BTREE_VACUUM in all cases
Replay of XLOG_BTREE_VACUUM during Hot Standby was previously thought to
require complex interlocking that matched the requirements on the
master. This required an O(N) operation that became a significant
problem with large indexes, causing replication delays of seconds or in
some cases minutes while the XLOG_BTREE_VACUUM was replayed.

This commit skips the “pin scan” that was previously required, by
observing in detail when and how it is safe to do so, with full
documentation. The pin scan is skipped only in replay; the VACUUM code
path on master is not touched here.

No tests included. Manual tests using an additional patch to view WAL records
and their timing have shown the change in WAL records and their handling has
successfully reduced replication delay.

This is a back-patch of commits 687f2cd7a0, 3e4b7d8798, b602842613
by Simon Riggs, to branches 9.4 and 9.5.  No further backpatch is
possible because this depends on catalog scans being MVCC.  I (Álvaro)
additionally updated a slight problem in the README, which explains why
this touches the 9.6 and master branches.
2016-11-17 13:31:30 -03:00
..
attnum.h Fix various typos and grammar errors in comments. 2015-04-26 18:42:31 +02:00
brin.h Fix BRIN to use SnapshotAny during summarization 2015-08-05 16:20:50 -03:00
brin_internal.h Add BRIN infrastructure for "inclusion" opclasses 2015-05-15 18:05:22 -03:00
brin_page.h Close some holes in BRIN page assignment 2015-08-12 14:20:38 -03:00
brin_pageops.h Close some holes in BRIN page assignment 2015-08-12 14:20:38 -03:00
brin_revmap.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
brin_tuple.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
brin_xlog.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
clog.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
commit_ts.h Rename (new|old)estCommitTs to (new|old)estCommitTsXid 2015-12-28 12:35:16 -08:00
genam.h More fixes for lossy-GiST-distance-functions patch. 2015-05-21 19:47:48 -04:00
gin.h pgindent run for 9.5 2015-05-23 21:35:49 -04:00
gin_private.h Fix memory leak and other bugs in ginPlaceToPage() & subroutines. 2016-04-20 14:25:15 -04:00
gist.h Move strategy numbers to include/access/stratnum.h 2015-05-15 17:03:16 -03:00
gist_private.h Fix outdated comments, GIST search queue is not an RBTree anymore. 2016-09-20 11:40:20 +03:00
gistscan.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
hash.h Fix building of large (bigger than shared_buffers) hash indexes. 2016-06-24 16:57:36 -04:00
heapam.h Redesign tablesample method API, and do extensive code review. 2015-07-25 14:39:00 -04:00
heapam_xlog.h Add support for INSERT ... ON CONFLICT DO NOTHING/UPDATE. 2015-05-08 05:43:10 +02:00
hio.h Add support for INSERT ... ON CONFLICT DO NOTHING/UPDATE. 2015-05-08 05:43:10 +02:00
htup.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
htup_details.h Fix handling of multixacts predating pg_upgrade 2016-06-24 18:29:28 -04:00
itup.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
multixact.h Remove legacy multixact truncation support. 2015-09-26 19:04:25 +02:00
nbtree.h Avoid pin scan for replay of XLOG_BTREE_VACUUM in all cases 2016-11-17 13:31:30 -03:00
parallel.h Sync 9.5 version of access/transam/parallel.c with HEAD. 2016-08-02 16:09:09 -04:00
printtup.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
reloptions.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
relscan.h Fix some oversights in BRIN patch. 2015-07-21 13:38:24 -04:00
rewriteheap.h Collection of typo fixes. 2015-05-20 16:56:22 +03:00
rmgr.h Add rmgr callback to name xlog record types for display purposes. 2014-09-19 16:20:29 +02:00
rmgrlist.h Collection of typo fixes. 2015-05-20 16:56:22 +03:00
sdir.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
skey.h Move strategy numbers to include/access/stratnum.h 2015-05-15 17:03:16 -03:00
slru.h Rework the way multixact truncations work. 2015-09-26 19:04:25 +02:00
spgist.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
spgist_private.h Don't assume that 'char' is signed. 2015-07-27 21:51:49 +03:00
stratnum.h pgindent run for 9.5 2015-05-23 21:35:49 -04:00
subtrans.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
sysattr.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
timeline.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
transam.h Rename (new|old)estCommitTs to (new|old)estCommitTsXid 2015-12-28 12:35:16 -08:00
tsmapi.h Redesign tablesample method API, and do extensive code review. 2015-07-25 14:39:00 -04:00
tupconvert.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
tupdesc.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
tupmacs.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
tuptoaster.h Fix deletion of speculatively inserted TOAST on conflict 2016-08-17 17:03:36 -07:00
twophase.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
twophase_rmgr.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
valid.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
visibilitymap.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
xact.h Remove duplicate macro definition. 2016-11-05 11:51:46 -04:00
xlog.h Remove files signaling a standby promotion request at postmaster startup 2015-09-09 22:52:28 +09:00
xlog_fn.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
xlog_internal.h Remove trailing commas in enums. 2016-04-14 19:25:41 -07:00
xlogdefs.h Introduce replication progress tracking infrastructure. 2015-04-29 19:30:53 +02:00
xloginsert.h pgindent run for 9.5 2015-05-23 21:35:49 -04:00
xlogreader.h pgindent run for 9.5 2015-05-23 21:35:49 -04:00
xlogrecord.h pgindent run for 9.5 2015-05-23 21:35:49 -04:00
xlogutils.h pgindent run for 9.5 2015-05-23 21:35:49 -04:00