mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08:00
Replace hardcoded 200000000 with autovacuum_freeze_max_age
Parts of the code used autovacuum_freeze_max_age to determine whether anti-multixact-wraparound vacuums are necessary, while others used a hardcoded 200000000 value. This leads to problems when autovacuum_freeze_max_age is set to a non-default value. Use the latter everywhere. Backpatch to 9.3, where vacuuming of multixacts was introduced. Andres Freund
This commit is contained in:
parent
79193c75f8
commit
76a31c689c
@ -74,6 +74,7 @@
|
||||
#include "funcapi.h"
|
||||
#include "miscadmin.h"
|
||||
#include "pg_trace.h"
|
||||
#include "postmaster/autovacuum.h"
|
||||
#include "storage/lmgr.h"
|
||||
#include "storage/pmsignal.h"
|
||||
#include "storage/procarray.h"
|
||||
@ -1958,6 +1959,10 @@ SetMultiXactIdLimit(MultiXactId oldest_datminmxid, Oid oldest_datoid)
|
||||
/*
|
||||
* We'll refuse to continue assigning MultiXactIds once we get within 100
|
||||
* multi of data loss.
|
||||
*
|
||||
* Note: This differs from the magic number used in
|
||||
* SetTransactionIdLimit() since vacuum itself will never generate new
|
||||
* multis.
|
||||
*/
|
||||
multiStopLimit = multiWrapLimit - 100;
|
||||
if (multiStopLimit < FirstMultiXactId)
|
||||
@ -1979,9 +1984,12 @@ SetMultiXactIdLimit(MultiXactId oldest_datminmxid, Oid oldest_datoid)
|
||||
|
||||
/*
|
||||
* We'll start trying to force autovacuums when oldest_datminmxid gets to
|
||||
* be more than 200 million transactions old.
|
||||
* be more than autovacuum_freeze_max_age mxids old.
|
||||
*
|
||||
* It's a bit ugly to just reuse limits for xids that way, but it doesn't
|
||||
* seem worth adding separate GUCs for that purpose.
|
||||
*/
|
||||
multiVacLimit = oldest_datminmxid + 200000000;
|
||||
multiVacLimit = oldest_datminmxid + autovacuum_freeze_max_age;
|
||||
if (multiVacLimit < FirstMultiXactId)
|
||||
multiVacLimit += FirstMultiXactId;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user