mirror of
https://github.com/postgres/postgres.git
synced 2026-07-08 01:01:01 -04:00
Remove replication slot advice from MultiXact wraparound hints
Previously, MultiXactId wraparound hints suggested dropping stale replication slots. While that advice is appropriate for transaction ID wraparound, where replication slots can hold back XID horizons, it was misleading for MultiXactId wraparound. Following it could lead users to drop replication slots unnecessarily without helping resolve the MultiXactId wraparound condition. MultiXact cleanup is not directly delayed by replication slots. Instead, it depends on whether old MultiXactIds can still be seen as live by running transactions. This commit removes the replication slot advice from MultiXactId wraparound hints, and documents that stale replication slots are normally not relevant to resolving MultiXactId wraparound problems. Backpatch to all supported branches. BUG #18876 Reported-by: Haruka Takatsuka <harukat@sraoss.co.jp> Author: Fujii Masao <masao.fujii@gmail.com> Discussion: https://postgr.es/m/18876-0d0b53bad5a1f4c1@postgresql.org Backpatch-through: 14
This commit is contained in:
parent
89f5f860cc
commit
4ebbf00188
3 changed files with 13 additions and 7 deletions
|
|
@ -869,6 +869,12 @@ HINT: Execute a database-wide VACUUM in that database.
|
|||
<simpara>Running transactions and prepared transactions can be ignored if there
|
||||
is no chance that they might appear in a multixact.</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>Unlike transaction ID wraparound, replication slots do not
|
||||
directly hold back multixact cleanup. Dropping stale replication
|
||||
slots is therefore not usually relevant to resolving multixact ID
|
||||
wraparound problems.</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>MXID information is not directly visible in system views such as
|
||||
<literal>pg_stat_activity</literal>; however, looking for old XIDs is still a good
|
||||
|
|
|
|||
|
|
@ -1040,14 +1040,14 @@ GetNewMultiXactId(int nmembers, MultiXactOffset *offset)
|
|||
errmsg("database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database \"%s\"",
|
||||
oldest_datname),
|
||||
errhint("Execute a database-wide VACUUM in that database.\n"
|
||||
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
|
||||
"You might also need to commit or roll back old prepared transactions.")));
|
||||
else
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
|
||||
errmsg("database is not accepting commands that assign new MultiXactIds to avoid wraparound data loss in database with OID %u",
|
||||
oldest_datoid),
|
||||
errhint("Execute a database-wide VACUUM in that database.\n"
|
||||
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
|
||||
"You might also need to commit or roll back old prepared transactions.")));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -1073,7 +1073,7 @@ GetNewMultiXactId(int nmembers, MultiXactOffset *offset)
|
|||
errdetail("Approximately %.2f%% of MultiXactIds are available for use.",
|
||||
(double) (multiWrapLimit - result) / (MaxMultiXactId / 2) * 100),
|
||||
errhint("Execute a database-wide VACUUM in that database.\n"
|
||||
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
|
||||
"You might also need to commit or roll back old prepared transactions.")));
|
||||
else
|
||||
ereport(WARNING,
|
||||
(errmsg_plural("database with OID %u must be vacuumed before %u more MultiXactId is used",
|
||||
|
|
@ -1084,7 +1084,7 @@ GetNewMultiXactId(int nmembers, MultiXactOffset *offset)
|
|||
errdetail("Approximately %.2f%% of MultiXactIds are available for use.",
|
||||
(double) (multiWrapLimit - result) / (MaxMultiXactId / 2) * 100),
|
||||
errhint("Execute a database-wide VACUUM in that database.\n"
|
||||
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
|
||||
"You might also need to commit or roll back old prepared transactions.")));
|
||||
}
|
||||
|
||||
/* Re-acquire lock and start over */
|
||||
|
|
@ -2211,7 +2211,7 @@ SetMultiXactIdLimit(MultiXactId oldest_datminmxid, Oid oldest_datoid)
|
|||
errdetail("Approximately %.2f%% of MultiXactIds are available for use.",
|
||||
(double) (multiWrapLimit - curMulti) / (MaxMultiXactId / 2) * 100),
|
||||
errhint("To avoid MultiXactId assignment failures, execute a database-wide VACUUM in that database.\n"
|
||||
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
|
||||
"You might also need to commit or roll back old prepared transactions.")));
|
||||
else
|
||||
ereport(WARNING,
|
||||
(errmsg_plural("database with OID %u must be vacuumed before %u more MultiXactId is used",
|
||||
|
|
@ -2222,7 +2222,7 @@ SetMultiXactIdLimit(MultiXactId oldest_datminmxid, Oid oldest_datoid)
|
|||
errdetail("Approximately %.2f%% of MultiXactIds are available for use.",
|
||||
(double) (multiWrapLimit - curMulti) / (MaxMultiXactId / 2) * 100),
|
||||
errhint("To avoid MultiXactId assignment failures, execute a database-wide VACUUM in that database.\n"
|
||||
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
|
||||
"You might also need to commit or roll back old prepared transactions.")));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1177,7 +1177,7 @@ vacuum_get_cutoffs(Relation rel, const VacuumParams *params,
|
|||
ereport(WARNING,
|
||||
(errmsg("cutoff for freezing multixacts is far in the past"),
|
||||
errhint("Close open transactions soon to avoid wraparound problems.\n"
|
||||
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
|
||||
"You might also need to commit or roll back old prepared transactions.")));
|
||||
|
||||
/*
|
||||
* Determine the minimum freeze age to use: as specified by the caller, or
|
||||
|
|
|
|||
Loading…
Reference in a new issue