pgsql: Truncate pg_multixact/'s contents during crash recovery

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Truncate pg_multixact/'s contents during crash recovery
Date: 2013-11-30 01:06:09
Message-ID: E1VmZ0b-0008HQ-H9@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Truncate pg_multixact/'s contents during crash recovery

Commit 9dc842f08 of 8.2 era prevented MultiXact truncation during crash
recovery, because there was no guarantee that enough state had been
setup, and because it wasn't deemed to be a good idea to remove data
during crash recovery anyway. Since then, due to Hot-Standby, streaming
replication and PITR, the amount of time a cluster can spend doing crash
recovery has increased significantly, to the point that a cluster may
even never come out of it. This has made not truncating the content of
pg_multixact/ not defensible anymore.

To fix, take care to setup enough state for multixact truncation before
crash recovery starts (easy since checkpoints contain the required
information), and move the current end-of-recovery actions to a new
TrimMultiXact() function, analogous to TrimCLOG().

At some later point, this should probably done similarly to the way
clog.c is doing it, which is to just WAL log truncations, but we can't
do that for the back branches.

Back-patch to 9.0. 8.4 also has the problem, but since there's no hot
standby there, it's much less pressing. In 9.2 and earlier, this patch
is simpler than in newer branches, because multixact access during
recovery isn't required. Add appropriate checks to make sure that's not
happening.

Andres Freund

Branch
------
REL9_3_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/215ac4ad6589e0f6a31cc4cd867aedba3cd42924

Modified Files
--------------
src/backend/access/transam/multixact.c | 53 +++++++++++++++++++++++++-------
src/backend/access/transam/xlog.c | 30 ++++++++++++++++--
src/include/access/multixact.h | 1 +
3 files changed, 70 insertions(+), 14 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Alvaro Herrera 2013-11-30 01:06:10 pgsql: Truncate pg_multixact/'s contents during crash recovery
Previous Message Alvaro Herrera 2013-11-30 01:06:08 pgsql: Replace hardcoded 200000000 with autovacuum_freeze_max_age