summaryrefslogtreecommitdiff
path: root/src/backend/commands/vacuum.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/vacuum.c')
-rw-r--r--src/backend/commands/vacuum.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index e6745e6145c..a13a2d7f222 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -69,6 +69,7 @@ int vacuum_multixact_freeze_min_age;
int vacuum_multixact_freeze_table_age;
int vacuum_failsafe_age;
int vacuum_multixact_failsafe_age;
+double vacuum_max_eager_freeze_failure_rate;
/*
* Variables for cost-based vacuum delay. The defaults differ between
@@ -406,6 +407,11 @@ ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel)
params.log_min_duration = -1;
/*
+ * Later, in vacuum_rel(), we check if a reloption override was specified.
+ */
+ params.max_eager_freeze_failure_rate = vacuum_max_eager_freeze_failure_rate;
+
+ /*
* Create special memory context for cross-transaction storage.
*
* Since it is a child of PortalContext, it will go away eventually even
@@ -2166,6 +2172,15 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams *params,
}
/*
+ * Check if the vacuum_max_eager_freeze_failure_rate table storage
+ * parameter was specified. This overrides the GUC value.
+ */
+ if (rel->rd_options != NULL &&
+ ((StdRdOptions *) rel->rd_options)->vacuum_max_eager_freeze_failure_rate >= 0)
+ params->max_eager_freeze_failure_rate =
+ ((StdRdOptions *) rel->rd_options)->vacuum_max_eager_freeze_failure_rate;
+
+ /*
* Set truncate option based on truncate reloption if it wasn't specified
* in VACUUM command, or when running in an autovacuum worker
*/