pgsql: Check for conflicting queries during replay of gistvacuumpage()

From: Alexander Korotkov <akorotkov(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Check for conflicting queries during replay of gistvacuumpage()
Date: 2018-12-20 23:38:02
Message-ID: E1ga7tC-0001Ot-Dr@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

Check for conflicting queries during replay of gistvacuumpage()

013ebc0a7b implements so-called GiST microvacuum. That is gistgettuple() marks
index tuples as dead when kill_prior_tuple is set. Later, when new tuple
insertion claims page space, those dead index tuples are physically deleted
from page. When this deletion is replayed on standby, it might conflict with
read-only queries. But 013ebc0a7b doesn't handle this. That may lead to
disappearance of some tuples from read-only snapshots on standby.

This commit implements resolving of conflicts between replay of GiST microvacuum
and standby queries. On the master we implement new WAL record type
XLOG_GIST_DELETE, which comprises necessary information. On stable releases
we've to be tricky to keep WAL compatibility. Information required for conflict
processing is just appended to data of XLOG_GIST_PAGE_UPDATE record. So,
PostgreSQL version, which doesn't know about conflict processing, will just
ignore that.

Reported-by: Andres Freund
Diagnosed-by: Andres Freund
Discussion: https://postgr.es/m/20181212224524.scafnlyjindmrbe6%40alap3.anarazel.de
Author: Alexander Korotkov
Backpatch-through: 9.6

Branch
------
REL9_6_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/1b02807457318fa61cb564b101669f82e1b7be23

Modified Files
--------------
src/backend/access/gist/gist.c | 24 +++--
src/backend/access/gist/gistbuild.c | 7 +-
src/backend/access/gist/gistvacuum.c | 3 +-
src/backend/access/gist/gistxlog.c | 193 ++++++++++++++++++++++++++++++++++-
src/include/access/gist_private.h | 9 +-
5 files changed, 220 insertions(+), 16 deletions(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Alexander Korotkov 2018-12-20 23:38:10 pgsql: Check for conflicting queries during replay of gistvacuumpage()
Previous Message Tom Lane 2018-12-20 21:22:11 pgsql: Avoid producing over-length specific_name outputs in information

Browse pgsql-hackers by date

  From Date Subject
Next Message Alexander Korotkov 2018-12-20 23:40:18 Re: gist microvacuum doesn't appear to care about hot standby?
Previous Message Andres Freund 2018-12-20 23:10:44 Re: Tid scan improvements