summaryrefslogtreecommitdiff
path: root/src/backend/postmaster/autovacuum.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/postmaster/autovacuum.c')
-rw-r--r--src/backend/postmaster/autovacuum.c58
1 files changed, 19 insertions, 39 deletions
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index ee556f3600d..5ccae24b25c 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -184,16 +184,11 @@ typedef struct av_relation
typedef struct autovac_table
{
Oid at_relid;
- bool at_dovacuum;
- bool at_doanalyze;
- int at_freeze_min_age;
- int at_freeze_table_age;
- int at_multixact_freeze_min_age;
- int at_multixact_freeze_table_age;
+ int at_vacoptions; /* bitmask of VacuumOption */
+ VacuumParams at_params;
int at_vacuum_cost_delay;
int at_vacuum_cost_limit;
bool at_dobalance;
- bool at_wraparound;
char *at_relname;
char *at_nspname;
char *at_datname;
@@ -2301,7 +2296,7 @@ do_autovacuum(void)
* next table in our list.
*/
HOLD_INTERRUPTS();
- if (tab->at_dovacuum)
+ if (tab->at_vacoptions & VACOPT_VACUUM)
errcontext("automatic vacuum of table \"%s.%s.%s\"",
tab->at_datname, tab->at_nspname, tab->at_relname);
else
@@ -2528,15 +2523,17 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
tab = palloc(sizeof(autovac_table));
tab->at_relid = relid;
- tab->at_dovacuum = dovacuum;
- tab->at_doanalyze = doanalyze;
- tab->at_freeze_min_age = freeze_min_age;
- tab->at_freeze_table_age = freeze_table_age;
- tab->at_multixact_freeze_min_age = multixact_freeze_min_age;
- tab->at_multixact_freeze_table_age = multixact_freeze_table_age;
+ tab->at_vacoptions = VACOPT_SKIPTOAST |
+ (dovacuum ? VACOPT_VACUUM : 0) |
+ (doanalyze ? VACOPT_ANALYZE : 0) |
+ (wraparound ? VACOPT_NOWAIT : 0);
+ tab->at_params.freeze_min_age = freeze_min_age;
+ tab->at_params.freeze_table_age = freeze_table_age;
+ tab->at_params.multixact_freeze_min_age = multixact_freeze_min_age;
+ tab->at_params.multixact_freeze_table_age = multixact_freeze_table_age;
+ tab->at_params.is_wraparound = wraparound;
tab->at_vacuum_cost_limit = vac_cost_limit;
tab->at_vacuum_cost_delay = vac_cost_delay;
- tab->at_wraparound = wraparound;
tab->at_relname = NULL;
tab->at_nspname = NULL;
tab->at_datname = NULL;
@@ -2737,39 +2734,22 @@ relation_needs_vacanalyze(Oid relid,
* Vacuum and/or analyze the specified table
*/
static void
-autovacuum_do_vac_analyze(autovac_table *tab,
- BufferAccessStrategy bstrategy)
+autovacuum_do_vac_analyze(autovac_table *tab, BufferAccessStrategy bstrategy)
{
- VacuumStmt vacstmt;
- RangeVar rangevar;
+ RangeVar rangevar;
/* Set up command parameters --- use local variables instead of palloc */
- MemSet(&vacstmt, 0, sizeof(vacstmt));
MemSet(&rangevar, 0, sizeof(rangevar));
rangevar.schemaname = tab->at_nspname;
rangevar.relname = tab->at_relname;
rangevar.location = -1;
- vacstmt.type = T_VacuumStmt;
- if (!tab->at_wraparound)
- vacstmt.options = VACOPT_NOWAIT;
- if (tab->at_dovacuum)
- vacstmt.options |= VACOPT_VACUUM;
- if (tab->at_doanalyze)
- vacstmt.options |= VACOPT_ANALYZE;
- vacstmt.freeze_min_age = tab->at_freeze_min_age;
- vacstmt.freeze_table_age = tab->at_freeze_table_age;
- vacstmt.multixact_freeze_min_age = tab->at_multixact_freeze_min_age;
- vacstmt.multixact_freeze_table_age = tab->at_multixact_freeze_table_age;
- /* we pass the OID, but might need this anyway for an error message */
- vacstmt.relation = &rangevar;
- vacstmt.va_cols = NIL;
-
/* Let pgstat know what we're doing */
autovac_report_activity(tab);
- vacuum(&vacstmt, tab->at_relid, false, bstrategy, tab->at_wraparound, true);
+ vacuum(tab->at_vacoptions, &rangevar, tab->at_relid, &tab->at_params, NIL,
+ bstrategy, true);
}
/*
@@ -2791,10 +2771,10 @@ autovac_report_activity(autovac_table *tab)
int len;
/* Report the command and possible options */
- if (tab->at_dovacuum)
+ if (tab->at_vacoptions & VACOPT_VACUUM)
snprintf(activity, MAX_AUTOVAC_ACTIV_LEN,
"autovacuum: VACUUM%s",
- tab->at_doanalyze ? " ANALYZE" : "");
+ tab->at_vacoptions & VACOPT_ANALYZE ? " ANALYZE" : "");
else
snprintf(activity, MAX_AUTOVAC_ACTIV_LEN,
"autovacuum: ANALYZE");
@@ -2806,7 +2786,7 @@ autovac_report_activity(autovac_table *tab)
snprintf(activity + len, MAX_AUTOVAC_ACTIV_LEN - len,
" %s.%s%s", tab->at_nspname, tab->at_relname,
- tab->at_wraparound ? " (to prevent wraparound)" : "");
+ tab->at_params.is_wraparound ? " (to prevent wraparound)" : "");
/* Set statement_timestamp() to current time for pg_stat_activity */
SetCurrentStatementStartTimestamp();