pgsql: Avoid pin scan for replay of XLOG_BTREE_VACUUM in all cases

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема pgsql: Avoid pin scan for replay of XLOG_BTREE_VACUUM in all cases
Дата
Msg-id E1c7PcF-0007XY-Qe@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
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 687f2cd7a015, 3e4b7d87988f, b60284261375
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.

Branch
------
REL9_4_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/30e3cb307d494990cb38cebff6bfc8b4ce27d7ab

Modified Files
--------------
src/backend/access/nbtree/README    | 22 ++++++++++++++++++++++
src/backend/access/nbtree/nbtree.c  | 15 +++++++++++----
src/backend/access/nbtree/nbtxlog.c | 23 +++++++++++++++++++++--
src/include/access/nbtree.h         |  6 ++++--
4 files changed, 58 insertions(+), 8 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: doc: Further XSLT HTML build performance optimization
Следующее
От: Alvaro Herrera
Дата:
Сообщение: pgsql: Avoid pin scan for replay of XLOG_BTREE_VACUUM in all cases