summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/sgml/config.sgml41
-rw-r--r--doc/src/sgml/maintenance.sgml3
-rw-r--r--doc/src/sgml/ref/create_table.sgml15
-rw-r--r--src/backend/access/common/reloptions.c15
-rw-r--r--src/backend/access/heap/vacuumlazy.c6
-rw-r--r--src/backend/commands/analyze.c8
-rw-r--r--src/backend/commands/vacuum.c10
-rw-r--r--src/backend/postmaster/autovacuum.c16
-rw-r--r--src/backend/utils/misc/guc_parameters.dat14
-rw-r--r--src/backend/utils/misc/postgresql.conf.sample7
-rw-r--r--src/bin/psql/tab-complete.in.c1
-rw-r--r--src/include/commands/vacuum.h11
-rw-r--r--src/include/postmaster/autovacuum.h1
-rw-r--r--src/include/utils/rel.h3
-rw-r--r--src/test/regress/pg_regress.c1
-rw-r--r--src/tools/ci/pg_ci_base.conf1
16 files changed, 122 insertions, 31 deletions
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index 39e658b7808..0a2a8b49fdb 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -7477,17 +7477,44 @@ local0.* /var/log/postgresql
</term>
<listitem>
<para>
- Causes each action executed by autovacuum to be logged if it ran for at
+ Causes vacuum action executed by autovacuum to be logged if it ran for at
least the specified amount of time. Setting this to zero logs
- all autovacuum actions. <literal>-1</literal> disables logging autovacuum
- actions. If this value is specified without units, it is taken as milliseconds.
- For example, if you set this to
- <literal>250ms</literal> then all automatic vacuums and analyzes that run
+ all vacuum actions by autovacuum. <literal>-1</literal> disables logging
+ vacuum actions by autovacuum. If this value is specified without units,
+ it is taken as milliseconds. For example, if you set this to
+ <literal>250ms</literal> then all automatic vacuums that run
250ms or longer will be logged. In addition, when this parameter is
set to any value other than <literal>-1</literal>, a message will be
- logged if an autovacuum action is skipped due to a conflicting lock or a
+ logged if a vacuum action by autovacuum is skipped due to a conflicting lock or a
concurrently dropped relation. The default is <literal>10min</literal>.
- Enabling this parameter can be helpful in tracking autovacuum activity.
+ Enabling this parameter can be helpful in tracking vacuum activity by autovacuum.
+ This parameter can only be set in the <filename>postgresql.conf</filename>
+ file or on the server command line; but the setting can be overridden for
+ individual tables by changing table storage parameters.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="guc-log-autoanalyze-min-duration" xreflabel="log_autoanalyze_min_duration">
+ <term><varname>log_autoanalyze_min_duration</varname> (<type>integer</type>)
+ <indexterm>
+ <primary><varname>log_autoanalyze_min_duration</varname></primary>
+ <secondary>configuration parameter</secondary>
+ </indexterm>
+ </term>
+ <listitem>
+ <para>
+ Causes analyze action executed by autovacuum to be logged if it ran for at
+ least the specified amount of time. Setting this to zero logs
+ all analyze actions by autovacuum. <literal>-1</literal> disables logging
+ analyze actions by autovacuum. If this value is specified without units,
+ it is taken as milliseconds. For example, if you set this to
+ <literal>250ms</literal> then all automatic analyzes that run
+ 250ms or longer will be logged. In addition, when this parameter is
+ set to any value other than <literal>-1</literal>, a message will be
+ logged if an analyze action by autovacuum is skipped due to a conflicting lock or a
+ concurrently dropped relation. The default is <literal>10min</literal>.
+ Enabling this parameter can be helpful in tracking analyze activity by autovacuum.
This parameter can only be set in the <filename>postgresql.conf</filename>
file or on the server command line; but the setting can be overridden for
individual tables by changing table storage parameters.
diff --git a/doc/src/sgml/maintenance.sgml b/doc/src/sgml/maintenance.sgml
index e7a9f58c015..dc59c88319e 100644
--- a/doc/src/sgml/maintenance.sgml
+++ b/doc/src/sgml/maintenance.sgml
@@ -892,7 +892,8 @@ HINT: Execute a database-wide VACUUM in that database.
the next database will be processed as soon as the first worker finishes.
Each worker process will check each table within its database and
execute <command>VACUUM</command> and/or <command>ANALYZE</command> as needed.
- <xref linkend="guc-log-autovacuum-min-duration"/> can be set to monitor
+ <xref linkend="guc-log-autovacuum-min-duration"/> and
+ <xref linkend="guc-log-autoanalyze-min-duration"/> can be set to monitor
autovacuum workers' activity.
</para>
diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml
index dc000e913c1..a157a244e4e 100644
--- a/doc/src/sgml/ref/create_table.sgml
+++ b/doc/src/sgml/ref/create_table.sgml
@@ -1966,6 +1966,21 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
</listitem>
</varlistentry>
+ <varlistentry id="reloption-log-autoanalyze-min-duration" xreflabel="log_autoanalyze_min_duration">
+ <term><literal>log_autoanalyze_min_duration</literal> (<type>integer</type>)
+ <indexterm>
+ <primary><varname>log_autoanalyze_min_duration</varname></primary>
+ <secondary>storage parameter</secondary>
+ </indexterm>
+ </term>
+ <listitem>
+ <para>
+ Per-table value for <xref linkend="guc-log-autoanalyze-min-duration"/>
+ parameter.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry id="reloption-vacuum-max-eager-freeze-failure-rate" xreflabel="vacuum_max_eager_freeze_failure_rate">
<term><literal>vacuum_max_eager_freeze_failure_rate</literal>, <literal>toast.vacuum_max_eager_freeze_failure_rate</literal> (<type>floating point</type>)
<indexterm>
diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c
index 35150bf237b..9e288dfecbf 100644
--- a/src/backend/access/common/reloptions.c
+++ b/src/backend/access/common/reloptions.c
@@ -322,7 +322,7 @@ static relopt_int intRelOpts[] =
{
{
"log_autovacuum_min_duration",
- "Sets the minimum execution time above which autovacuum actions will be logged",
+ "Sets the minimum execution time above which vacuum actions by autovacuum will be logged",
RELOPT_KIND_HEAP | RELOPT_KIND_TOAST,
ShareUpdateExclusiveLock
},
@@ -330,6 +330,15 @@ static relopt_int intRelOpts[] =
},
{
{
+ "log_autoanalyze_min_duration",
+ "Sets the minimum execution time above which analyze actions by autovacuum will be logged",
+ RELOPT_KIND_HEAP,
+ ShareUpdateExclusiveLock
+ },
+ -1, -1, INT_MAX
+ },
+ {
+ {
"toast_tuple_target",
"Sets the target tuple length at which external columns will be toasted",
RELOPT_KIND_HEAP,
@@ -1895,7 +1904,9 @@ default_reloptions(Datum reloptions, bool validate, relopt_kind kind)
{"autovacuum_multixact_freeze_table_age", RELOPT_TYPE_INT,
offsetof(StdRdOptions, autovacuum) + offsetof(AutoVacOpts, multixact_freeze_table_age)},
{"log_autovacuum_min_duration", RELOPT_TYPE_INT,
- offsetof(StdRdOptions, autovacuum) + offsetof(AutoVacOpts, log_min_duration)},
+ offsetof(StdRdOptions, autovacuum) + offsetof(AutoVacOpts, log_vacuum_min_duration)},
+ {"log_autoanalyze_min_duration", RELOPT_TYPE_INT,
+ offsetof(StdRdOptions, autovacuum) + offsetof(AutoVacOpts, log_analyze_min_duration)},
{"toast_tuple_target", RELOPT_TYPE_INT,
offsetof(StdRdOptions, toast_tuple_target)},
{"autovacuum_vacuum_cost_delay", RELOPT_TYPE_REAL,
diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c
index 71fbd68c8ea..d2b031fdd06 100644
--- a/src/backend/access/heap/vacuumlazy.c
+++ b/src/backend/access/heap/vacuumlazy.c
@@ -648,7 +648,7 @@ heap_vacuum_rel(Relation rel, const VacuumParams params,
verbose = (params.options & VACOPT_VERBOSE) != 0;
instrument = (verbose || (AmAutoVacuumWorkerProcess() &&
- params.log_min_duration >= 0));
+ params.log_vacuum_min_duration >= 0));
if (instrument)
{
pg_rusage_init(&ru0);
@@ -959,9 +959,9 @@ heap_vacuum_rel(Relation rel, const VacuumParams params,
{
TimestampTz endtime = GetCurrentTimestamp();
- if (verbose || params.log_min_duration == 0 ||
+ if (verbose || params.log_vacuum_min_duration == 0 ||
TimestampDifferenceExceeds(starttime, endtime,
- params.log_min_duration))
+ params.log_vacuum_min_duration))
{
long secs_dur;
int usecs_dur;
diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c
index 12b4f3fd36e..c2e216563c6 100644
--- a/src/backend/commands/analyze.c
+++ b/src/backend/commands/analyze.c
@@ -138,7 +138,7 @@ analyze_rel(Oid relid, RangeVar *relation,
* Make sure to generate only logs for ANALYZE in this case.
*/
onerel = vacuum_open_relation(relid, relation, params.options & ~(VACOPT_VACUUM),
- params.log_min_duration >= 0,
+ params.log_analyze_min_duration >= 0,
ShareUpdateExclusiveLock);
/* leave if relation could not be opened or locked */
@@ -310,7 +310,7 @@ do_analyze_rel(Relation onerel, const VacuumParams params,
verbose = (params.options & VACOPT_VERBOSE) != 0;
instrument = (verbose || (AmAutoVacuumWorkerProcess() &&
- params.log_min_duration >= 0));
+ params.log_analyze_min_duration >= 0));
if (inh)
ereport(elevel,
(errmsg("analyzing \"%s.%s\" inheritance tree",
@@ -735,9 +735,9 @@ do_analyze_rel(Relation onerel, const VacuumParams params,
{
TimestampTz endtime = GetCurrentTimestamp();
- if (verbose || params.log_min_duration == 0 ||
+ if (verbose || params.log_analyze_min_duration == 0 ||
TimestampDifferenceExceeds(starttime, endtime,
- params.log_min_duration))
+ params.log_analyze_min_duration))
{
long delay_in_ms;
WalUsage walusage;
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index e2f181eed7b..ed03e3bd50d 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -406,8 +406,12 @@ ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel)
/* user-invoked vacuum is never "for wraparound" */
params.is_wraparound = false;
- /* user-invoked vacuum uses VACOPT_VERBOSE instead of log_min_duration */
- params.log_min_duration = -1;
+ /*
+ * user-invoked vacuum uses VACOPT_VERBOSE instead of
+ * log_vacuum_min_duration and log_analyze_min_duration
+ */
+ params.log_vacuum_min_duration = -1;
+ params.log_analyze_min_duration = -1;
/*
* Later, in vacuum_rel(), we check if a reloption override was specified.
@@ -2063,7 +2067,7 @@ vacuum_rel(Oid relid, RangeVar *relation, VacuumParams params,
/* open the relation and get the appropriate lock on it */
rel = vacuum_open_relation(relid, relation, params.options,
- params.log_min_duration >= 0, lmode);
+ params.log_vacuum_min_duration >= 0, lmode);
/* leave if relation could not be opened or locked */
if (!rel)
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index fb5d3b27224..5084af7dfb6 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -133,6 +133,7 @@ double autovacuum_vac_cost_delay;
int autovacuum_vac_cost_limit;
int Log_autovacuum_min_duration = 600000;
+int Log_autoanalyze_min_duration = 600000;
/* the minimum allowed time between two awakenings of the launcher */
#define MIN_AUTOVAC_SLEEPTIME 100.0 /* milliseconds */
@@ -2814,7 +2815,8 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
int freeze_table_age;
int multixact_freeze_min_age;
int multixact_freeze_table_age;
- int log_min_duration;
+ int log_vacuum_min_duration;
+ int log_analyze_min_duration;
/*
* Calculate the vacuum cost parameters and the freeze ages. If there
@@ -2824,10 +2826,15 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
*/
/* -1 in autovac setting means use log_autovacuum_min_duration */
- log_min_duration = (avopts && avopts->log_min_duration >= 0)
- ? avopts->log_min_duration
+ log_vacuum_min_duration = (avopts && avopts->log_vacuum_min_duration >= 0)
+ ? avopts->log_vacuum_min_duration
: Log_autovacuum_min_duration;
+ /* -1 in autovac setting means use log_autoanalyze_min_duration */
+ log_analyze_min_duration = (avopts && avopts->log_analyze_min_duration >= 0)
+ ? avopts->log_analyze_min_duration
+ : Log_autoanalyze_min_duration;
+
/* these do not have autovacuum-specific settings */
freeze_min_age = (avopts && avopts->freeze_min_age >= 0)
? avopts->freeze_min_age
@@ -2877,7 +2884,8 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
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_params.log_min_duration = log_min_duration;
+ tab->at_params.log_vacuum_min_duration = log_vacuum_min_duration;
+ tab->at_params.log_analyze_min_duration = log_analyze_min_duration;
tab->at_params.toast_parent = InvalidOid;
/*
diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat
index b176d5130e4..d6fc8333850 100644
--- a/src/backend/utils/misc/guc_parameters.dat
+++ b/src/backend/utils/misc/guc_parameters.dat
@@ -1771,8 +1771,8 @@
},
{ name => 'log_autovacuum_min_duration', type => 'int', context => 'PGC_SIGHUP', group => 'LOGGING_WHAT',
- short_desc => 'Sets the minimum execution time above which autovacuum actions will be logged.',
- long_desc => '-1 disables logging autovacuum actions. 0 means log all autovacuum actions.',
+ short_desc => 'Sets the minimum execution time above which vacuum actions by autovacuum will be logged.',
+ long_desc => '-1 disables logging vacuum actions by autovacuum. 0 means log all vacuum actions by autovacuum.',
flags => 'GUC_UNIT_MS',
variable => 'Log_autovacuum_min_duration',
boot_val => '600000',
@@ -1780,6 +1780,16 @@
max => 'INT_MAX',
},
+{ name => 'log_autoanalyze_min_duration', type => 'int', context => 'PGC_SIGHUP', group => 'LOGGING_WHAT',
+ short_desc => 'Sets the minimum execution time above which analyze actions by autovacuum will be logged.',
+ long_desc => '-1 disables logging analyze actions by autovacuum. 0 means log all analyze actions by autovacuum.',
+ flags => 'GUC_UNIT_MS',
+ variable => 'Log_autoanalyze_min_duration',
+ boot_val => '600000',
+ min => '-1',
+ max => 'INT_MAX',
+},
+
{ name => 'log_parameter_max_length', type => 'int', context => 'PGC_SUSET', group => 'LOGGING_WHAT',
short_desc => 'Sets the maximum length in bytes of data logged for bind parameter values when logging statements.',
long_desc => '-1 means log values in full.',
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index c5d612ab552..f62b61967ef 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -588,7 +588,12 @@
#debug_print_rewritten = off
#debug_print_plan = off
#debug_pretty_print = on
-#log_autovacuum_min_duration = 10min # log autovacuum activity;
+#log_autovacuum_min_duration = 10min # log vacuum activity by autovacuum;
+ # -1 disables, 0 logs all actions and
+ # their durations, > 0 logs only
+ # actions running at least this number
+ # of milliseconds.
+#log_autoanalyze_min_duration = 10min # log analyze activity by autovacuum;
# -1 disables, 0 logs all actions and
# their durations, > 0 logs only
# actions running at least this number
diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c
index 64bfd309c9a..ad37f9f6ed0 100644
--- a/src/bin/psql/tab-complete.in.c
+++ b/src/bin/psql/tab-complete.in.c
@@ -1421,6 +1421,7 @@ static const char *const table_storage_parameters[] = {
"autovacuum_vacuum_threshold",
"fillfactor",
"log_autovacuum_min_duration",
+ "log_autoanalyze_min_duration",
"parallel_workers",
"toast.autovacuum_enabled",
"toast.autovacuum_freeze_max_age",
diff --git a/src/include/commands/vacuum.h b/src/include/commands/vacuum.h
index 14eeccbd718..1f3290c7fbf 100644
--- a/src/include/commands/vacuum.h
+++ b/src/include/commands/vacuum.h
@@ -224,9 +224,14 @@ typedef struct VacuumParams
int multixact_freeze_table_age; /* multixact age at which to scan
* whole table */
bool is_wraparound; /* force a for-wraparound vacuum */
- int log_min_duration; /* minimum execution threshold in ms at
- * which autovacuum is logged, -1 to use
- * default */
+ int log_vacuum_min_duration; /* minimum execution threshold in
+ * ms at which vacuum by
+ * autovacuum is logged, -1 to use
+ * default */
+ int log_analyze_min_duration; /* minimum execution threshold in
+ * ms at which analyze by
+ * autovacuum is logged, -1 to use
+ * default */
VacOptValue index_cleanup; /* Do index vacuum and cleanup */
VacOptValue truncate; /* Truncate empty pages at the end */
Oid toast_parent; /* for privilege checks when recursing */
diff --git a/src/include/postmaster/autovacuum.h b/src/include/postmaster/autovacuum.h
index e8135f41a1c..023ac6d5fa8 100644
--- a/src/include/postmaster/autovacuum.h
+++ b/src/include/postmaster/autovacuum.h
@@ -48,6 +48,7 @@ extern PGDLLIMPORT int autovacuum_vac_cost_limit;
extern PGDLLIMPORT int AutovacuumLauncherPid;
extern PGDLLIMPORT int Log_autovacuum_min_duration;
+extern PGDLLIMPORT int Log_autoanalyze_min_duration;
/* Status inquiry functions */
extern bool AutoVacuumingActive(void);
diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h
index 21990436373..80286076a11 100644
--- a/src/include/utils/rel.h
+++ b/src/include/utils/rel.h
@@ -322,7 +322,8 @@ typedef struct AutoVacOpts
int multixact_freeze_min_age;
int multixact_freeze_max_age;
int multixact_freeze_table_age;
- int log_min_duration;
+ int log_vacuum_min_duration;
+ int log_analyze_min_duration;
float8 vacuum_cost_delay;
float8 vacuum_scale_factor;
float8 vacuum_ins_scale_factor;
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index 61c035a3983..efc41fca2ba 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -2401,6 +2401,7 @@ regression_main(int argc, char *argv[],
fputs("\n# Configuration added by pg_regress\n\n", pg_conf);
fputs("log_autovacuum_min_duration = 0\n", pg_conf);
+ fputs("log_autoanalyze_min_duration = 0\n", pg_conf);
fputs("log_checkpoints = on\n", pg_conf);
fputs("log_line_prefix = '%m %b[%p] %q%a '\n", pg_conf);
fputs("log_lock_waits = on\n", pg_conf);
diff --git a/src/tools/ci/pg_ci_base.conf b/src/tools/ci/pg_ci_base.conf
index 695e0a0d6ec..ff05646c90e 100644
--- a/src/tools/ci/pg_ci_base.conf
+++ b/src/tools/ci/pg_ci_base.conf
@@ -7,6 +7,7 @@ max_prepared_transactions = 10
# Settings that make logs more useful
log_autovacuum_min_duration = 0
+log_autoanalyze_min_duration = 0
log_checkpoints = true
log_connections = all
log_disconnections = true