Thread: pgsql: Fix recently-understood problems with handling of XID freezing,
pgsql: Fix recently-understood problems with handling of XID freezing,
From
tgl@postgresql.org (Tom Lane)
Date:
Log Message: ----------- Fix recently-understood problems with handling of XID freezing, particularly in PITR scenarios. We now WAL-log the replacement of old XIDs with FrozenTransactionId, so that such replacement is guaranteed to propagate to PITR slave databases. Also, rather than relying on hint-bit updates to be preserved, pg_clog is not truncated until all instances of an XID are known to have been replaced by FrozenTransactionId. Add new GUC variables and pg_autovacuum columns to allow management of the freezing policy, so that users can trade off the size of pg_clog against the amount of freezing work done. Revise the already-existing code that forces autovacuum of tables approaching the wraparound point to make it more bulletproof; also, revise the autovacuum logic so that anti-wraparound vacuuming is done per-table rather than per-database. initdb forced because of changes in pg_class, pg_database, and pg_autovacuum catalogs. Heikki Linnakangas, Simon Riggs, and Tom Lane. Modified Files: -------------- pgsql/doc/src/sgml: catalogs.sgml (r2.135 -> r2.136) (http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/catalogs.sgml.diff?r1=2.135&r2=2.136) config.sgml (r1.93 -> r1.94) (http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/config.sgml.diff?r1=1.93&r2=1.94) maintenance.sgml (r1.63 -> r1.64) (http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/maintenance.sgml.diff?r1=1.63&r2=1.64) manage-ag.sgml (r2.48 -> r2.49) (http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/manage-ag.sgml.diff?r1=2.48&r2=2.49) pgsql/doc/src/sgml/ref: vacuum.sgml (r1.42 -> r1.43) (http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/ref/vacuum.sgml.diff?r1=1.42&r2=1.43) pgsql/src/backend/access/heap: heapam.c (r1.220 -> r1.221) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/heap/heapam.c.diff?r1=1.220&r2=1.221) pgsql/src/backend/access/transam: clog.c (r1.40 -> r1.41) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/clog.c.diff?r1=1.40&r2=1.41) rmgr.c (r1.24 -> r1.25) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/rmgr.c.diff?r1=1.24&r2=1.25) varsup.c (r1.75 -> r1.76) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/varsup.c.diff?r1=1.75&r2=1.76) xact.c (r1.227 -> r1.228) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/xact.c.diff?r1=1.227&r2=1.228) xlog.c (r1.252 -> r1.253) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/xlog.c.diff?r1=1.252&r2=1.253) pgsql/src/backend/catalog: heap.c (r1.313 -> r1.314) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/heap.c.diff?r1=1.313&r2=1.314) pgsql/src/backend/commands: analyze.c (r1.100 -> r1.101) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/analyze.c.diff?r1=1.100&r2=1.101) dbcommands.c (r1.186 -> r1.187) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/dbcommands.c.diff?r1=1.186&r2=1.187) vacuum.c (r1.341 -> r1.342) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/vacuum.c.diff?r1=1.341&r2=1.342) vacuumlazy.c (r1.80 -> r1.81) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/vacuumlazy.c.diff?r1=1.80&r2=1.81) pgsql/src/backend/libpq: hba.c (r1.156 -> r1.157) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/libpq/hba.c.diff?r1=1.156&r2=1.157) pgsql/src/backend/nodes: copyfuncs.c (r1.352 -> r1.353) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/copyfuncs.c.diff?r1=1.352&r2=1.353) equalfuncs.c (r1.286 -> r1.287) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/equalfuncs.c.diff?r1=1.286&r2=1.287) pgsql/src/backend/parser: gram.y (r2.567 -> r2.568) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/parser/gram.y.diff?r1=2.567&r2=2.568) pgsql/src/backend/postmaster: autovacuum.c (r1.27 -> r1.28) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/postmaster/autovacuum.c.diff?r1=1.27&r2=1.28) postmaster.c (r1.500 -> r1.501) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/postmaster/postmaster.c.diff?r1=1.500&r2=1.501) pgsql/src/backend/storage/ipc: procarray.c (r1.18 -> r1.19) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/ipc/procarray.c.diff?r1=1.18&r2=1.19) pgsql/src/backend/utils/init: flatfiles.c (r1.21 -> r1.22) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/init/flatfiles.c.diff?r1=1.21&r2=1.22) postinit.c (r1.171 -> r1.172) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/init/postinit.c.diff?r1=1.171&r2=1.172) pgsql/src/backend/utils/misc: guc.c (r1.357 -> r1.358) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/misc/guc.c.diff?r1=1.357&r2=1.358) postgresql.conf.sample (r1.197 -> r1.198) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/misc/postgresql.conf.sample.diff?r1=1.197&r2=1.198) pgsql/src/backend/utils/time: tqual.c (r1.98 -> r1.99) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/time/tqual.c.diff?r1=1.98&r2=1.99) pgsql/src/include/access: clog.h (r1.17 -> r1.18) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/clog.h.diff?r1=1.17&r2=1.18) heapam.h (r1.116 -> r1.117) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/heapam.h.diff?r1=1.116&r2=1.117) htup.h (r1.86 -> r1.87) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/htup.h.diff?r1=1.86&r2=1.87) rmgr.h (r1.16 -> r1.17) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/rmgr.h.diff?r1=1.16&r2=1.17) transam.h (r1.58 -> r1.59) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/transam.h.diff?r1=1.58&r2=1.59) xlog.h (r1.74 -> r1.75) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/access/xlog.h.diff?r1=1.74&r2=1.75) pgsql/src/include/catalog: catversion.h (r1.358 -> r1.359) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/catversion.h.diff?r1=1.358&r2=1.359) pg_attribute.h (r1.125 -> r1.126) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_attribute.h.diff?r1=1.125&r2=1.126) pg_autovacuum.h (r1.4 -> r1.5) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_autovacuum.h.diff?r1=1.4&r2=1.5) pg_class.h (r1.96 -> r1.97) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_class.h.diff?r1=1.96&r2=1.97) pg_database.h (r1.41 -> r1.42) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/pg_database.h.diff?r1=1.41&r2=1.42) pgsql/src/include/commands: vacuum.h (r1.67 -> r1.68) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/vacuum.h.diff?r1=1.67&r2=1.68) pgsql/src/include/libpq: hba.h (r1.44 -> r1.45) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/libpq/hba.h.diff?r1=1.44&r2=1.45) pgsql/src/include/nodes: parsenodes.h (r1.333 -> r1.334) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/nodes/parsenodes.h.diff?r1=1.333&r2=1.334) pgsql/src/include/postmaster: autovacuum.h (r1.4 -> r1.5) (http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/postmaster/autovacuum.h.diff?r1=1.4&r2=1.5)