aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/access/common/reloptions.c20
-rw-r--r--src/backend/postmaster/autovacuum.c86
2 files changed, 57 insertions, 49 deletions
diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c
index b970601b1c8..e0f8d55853d 100644
--- a/src/backend/access/common/reloptions.c
+++ b/src/backend/access/common/reloptions.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/common/reloptions.c,v 1.28 2009/06/11 14:48:53 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/access/common/reloptions.c,v 1.29 2009/08/27 17:18:44 alvherre Exp $
*
*-------------------------------------------------------------------------
*/
@@ -108,7 +108,7 @@ static relopt_int intRelOpts[] =
"Minimum number of tuple updates or deletes prior to vacuum",
RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
},
- 50, 0, INT_MAX
+ -1, 0, INT_MAX
},
{
{
@@ -116,7 +116,7 @@ static relopt_int intRelOpts[] =
"Minimum number of tuple inserts, updates or deletes prior to analyze",
RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
},
- 50, 0, INT_MAX
+ -1, 0, INT_MAX
},
{
{
@@ -124,7 +124,7 @@ static relopt_int intRelOpts[] =
"Vacuum cost delay in milliseconds, for autovacuum",
RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
},
- 20, 0, 100
+ -1, 0, 100
},
{
{
@@ -132,7 +132,7 @@ static relopt_int intRelOpts[] =
"Vacuum cost amount available before napping, for autovacuum",
RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
},
- 200, 1, 10000
+ -1, 1, 10000
},
{
{
@@ -140,7 +140,7 @@ static relopt_int intRelOpts[] =
"Minimum age at which VACUUM should freeze a table row, for autovacuum",
RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
},
- 100000000, 0, 1000000000
+ -1, 0, 1000000000
},
{
{
@@ -148,14 +148,14 @@ static relopt_int intRelOpts[] =
"Age at which to autovacuum a table to prevent transaction ID wraparound",
RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
},
- 200000000, 100000000, 2000000000
+ -1, 100000000, 2000000000
},
{
{
"autovacuum_freeze_table_age",
"Age at which VACUUM should perform a full table sweep to replace old Xid values with FrozenXID",
RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
- }, 150000000, 0, 2000000000
+ }, -1, 0, 2000000000
},
/* list terminator */
{{NULL}}
@@ -169,7 +169,7 @@ static relopt_real realRelOpts[] =
"Number of tuple updates or deletes prior to vacuum as a fraction of reltuples",
RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
},
- 0.2, 0.0, 100.0
+ -1, 0.0, 100.0
},
{
{
@@ -177,7 +177,7 @@ static relopt_real realRelOpts[] =
"Number of tuple inserts, updates or deletes prior to analyze as a fraction of reltuples",
RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
},
- 0.1, 0.0, 100.0
+ -1, 0.0, 100.0
},
/* list terminator */
{{NULL}}
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index 49b3ffa38cc..ea4fe65b519 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -55,7 +55,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.102 2009/08/24 17:23:02 alvherre Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.103 2009/08/27 17:18:44 alvherre Exp $
*
*-------------------------------------------------------------------------
*/
@@ -2448,25 +2448,29 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
* toast table, try the main table too. Otherwise use the GUC
* defaults, autovacuum's own first and plain vacuum second.
*/
- if (avopts)
- {
- vac_cost_delay = avopts->vacuum_cost_delay;
- vac_cost_limit = avopts->vacuum_cost_limit;
- freeze_min_age = avopts->freeze_min_age;
- freeze_table_age = avopts->freeze_table_age;
- }
- else
- {
- /* -1 in autovac setting means use plain vacuum_cost_delay */
- vac_cost_delay = autovacuum_vac_cost_delay >= 0 ?
- autovacuum_vac_cost_delay : VacuumCostDelay;
- /* 0 or -1 in autovac setting means use plain vacuum_cost_limit */
- vac_cost_limit = autovacuum_vac_cost_limit > 0 ?
- autovacuum_vac_cost_limit : VacuumCostLimit;
- /* these do not have autovacuum-specific settings */
- freeze_min_age = default_freeze_min_age;
- freeze_table_age = default_freeze_table_age;
- }
+
+ /* -1 in autovac setting means use plain vacuum_cost_delay */
+ vac_cost_delay = (avopts && avopts->vacuum_cost_delay >= 0)
+ ? avopts->vacuum_cost_delay
+ : (autovacuum_vac_cost_delay >= 0)
+ ? autovacuum_vac_cost_delay
+ : VacuumCostDelay;
+
+ /* 0 or -1 in autovac setting means use plain vacuum_cost_limit */
+ vac_cost_limit = (avopts && avopts->vacuum_cost_limit > 0)
+ ? avopts->vacuum_cost_limit
+ : (autovacuum_vac_cost_limit > 0)
+ ? autovacuum_vac_cost_limit
+ : VacuumCostLimit;
+
+ /* these do not have autovacuum-specific settings */
+ freeze_min_age = (avopts && avopts->freeze_min_age >= 0)
+ ? avopts->freeze_min_age
+ : default_freeze_min_age;
+
+ freeze_table_age = (avopts && avopts->freeze_table_age >= 0)
+ ? avopts->freeze_table_age
+ : default_freeze_table_age;
tab = palloc(sizeof(autovac_table));
tab->at_relid = relid;
@@ -2563,25 +2567,29 @@ relation_needs_vacanalyze(Oid relid,
* sources: the passed reloptions (which could be a main table or a toast
* table), or the autovacuum GUC variables.
*/
- if (relopts)
- {
- vac_scale_factor = relopts->vacuum_scale_factor;
- vac_base_thresh = relopts->vacuum_threshold;
- anl_scale_factor = relopts->analyze_scale_factor;
- anl_base_thresh = relopts->analyze_threshold;
- freeze_max_age = Min(relopts->freeze_max_age,
- autovacuum_freeze_max_age);
- av_enabled = relopts->enabled;
- }
- else
- {
- vac_scale_factor = autovacuum_vac_scale;
- vac_base_thresh = autovacuum_vac_thresh;
- anl_scale_factor = autovacuum_anl_scale;
- anl_base_thresh = autovacuum_anl_thresh;
- freeze_max_age = autovacuum_freeze_max_age;
- av_enabled = true;
- }
+
+ /* -1 in autovac setting means use plain vacuum_cost_delay */
+ vac_scale_factor = (relopts && relopts->vacuum_scale_factor >= 0)
+ ? relopts->vacuum_scale_factor
+ : autovacuum_vac_scale;
+
+ vac_base_thresh = (relopts && relopts->vacuum_threshold >= 0)
+ ? relopts->vacuum_threshold
+ : autovacuum_vac_thresh;
+
+ anl_scale_factor = (relopts && relopts->analyze_scale_factor >= 0)
+ ? relopts->analyze_scale_factor
+ : autovacuum_anl_scale;
+
+ anl_base_thresh = (relopts && relopts->analyze_threshold >= 0)
+ ? relopts->analyze_threshold
+ : autovacuum_anl_thresh;
+
+ freeze_max_age = (relopts && relopts->freeze_max_age >= 0)
+ ? Min(relopts->freeze_max_age, autovacuum_freeze_max_age)
+ : autovacuum_freeze_max_age;
+
+ av_enabled = (relopts ? relopts->enabled : true);
/* Force vacuum if table is at risk of wraparound */
xidForceLimit = recentXid - freeze_max_age;