Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4ff695b

Browse files
committed
Add log_min_autovacuum_duration per-table option
This is useful to control autovacuum log volume, for situations wheremonitoring only a set of tables is necessary.Author: Michael PaquierReviewed by: A team led by Naoya Anzai (also including Akira Kurosawa,Taiki Kondo, Huong Dangminh), Fujii Masao.
1 parenta75fb9b commit4ff695b

File tree

9 files changed

+63
-24
lines changed

9 files changed

+63
-24
lines changed

‎doc/src/sgml/ref/create_table.sgml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -881,9 +881,9 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXI
881881
<literal>toast.</literal>, which can be used to control the behavior of the
882882
table's secondary <acronym>TOAST</> table, if any
883883
(see <xref linkend="storage-toast"> for more information about TOAST).
884-
Note that the TOAST tableinherits the
885-
<literal>autovacuum_*</literal> values from its parent table, if there are
886-
no<literal>toast.autovacuum_*</literal> settings set.
884+
Note that the TOAST tableuses the parameter values defined for
885+
the main table, for each parameter applicable to TOAST tables and
886+
for whichnovalue is set in the TOAST table itself.
887887
</para>
888888

889889
<variablelist>
@@ -1060,13 +1060,23 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXI
10601060
</listitem>
10611061
</varlistentry>
10621062

1063+
<varlistentry>
1064+
<term><literal>log_autovacuum_min_duration</literal>, <literal>toast.log_autovacuum_min_duration</literal> (<type>integer</type>)</term>
1065+
<listitem>
1066+
<para>
1067+
Custom <xref linkend="guc-log-autovacuum-min-duration"> parameter.
1068+
</para>
1069+
</listitem>
1070+
</varlistentry>
1071+
10631072
<varlistentry>
10641073
<term><literal>user_catalog_table</literal> (<type>boolean</type>)</term>
10651074
<listitem>
10661075
<para>
10671076
Declare a table as an additional catalog table, e.g. for the purpose of
10681077
logical replication. See
10691078
<xref linkend="logicaldecoding-capabilities"> for details.
1079+
This parameter cannot be set for TOAST tables.
10701080
</para>
10711081
</listitem>
10721082
</varlistentry>

‎src/backend/access/common/reloptions.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,14 @@ static relopt_int intRelOpts[] =
209209
RELOPT_KIND_HEAP |RELOPT_KIND_TOAST
210210
},-1,0,2000000000
211211
},
212+
{
213+
{
214+
"log_autovacuum_min_duration",
215+
"Sets the minimum execution time above which autovacuum actions will be logged",
216+
RELOPT_KIND_HEAP |RELOPT_KIND_TOAST
217+
},
218+
-1,-1,INT_MAX
219+
},
212220
{
213221
{
214222
"pages_per_range",
@@ -1210,6 +1218,8 @@ default_reloptions(Datum reloptions, bool validate, relopt_kind kind)
12101218
offsetof(StdRdOptions,autovacuum)+offsetof(AutoVacOpts,multixact_freeze_max_age)},
12111219
{"autovacuum_multixact_freeze_table_age",RELOPT_TYPE_INT,
12121220
offsetof(StdRdOptions,autovacuum)+offsetof(AutoVacOpts,multixact_freeze_table_age)},
1221+
{"log_autovacuum_min_duration",RELOPT_TYPE_INT,
1222+
offsetof(StdRdOptions,autovacuum)+offsetof(AutoVacOpts,log_min_duration)},
12131223
{"autovacuum_vacuum_scale_factor",RELOPT_TYPE_REAL,
12141224
offsetof(StdRdOptions,autovacuum)+offsetof(AutoVacOpts,vacuum_scale_factor)},
12151225
{"autovacuum_analyze_scale_factor",RELOPT_TYPE_REAL,

‎src/backend/commands/analyze.c

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ static MemoryContext anl_context = NULL;
8585
staticBufferAccessStrategyvac_strategy;
8686

8787

88-
staticvoiddo_analyze_rel(Relationonerel,intoptions,List*va_cols,
88+
staticvoiddo_analyze_rel(Relationonerel,intoptions,
89+
VacuumParams*params,List*va_cols,
8990
AcquireSampleRowsFuncacquirefunc,BlockNumberrelpages,
9091
boolinh,boolin_outer_xact,intelevel);
9192
staticvoidBlockSampler_Init(BlockSamplerbs,BlockNumbernblocks,
@@ -115,8 +116,9 @@ static Datum ind_fetch_func(VacAttrStatsP stats, int rownum, bool *isNull);
115116
*analyze_rel() -- analyze one relation
116117
*/
117118
void
118-
analyze_rel(Oidrelid,RangeVar*relation,intoptions,List*va_cols,
119-
boolin_outer_xact,BufferAccessStrategybstrategy)
119+
analyze_rel(Oidrelid,RangeVar*relation,intoptions,
120+
VacuumParams*params,List*va_cols,boolin_outer_xact,
121+
BufferAccessStrategybstrategy)
120122
{
121123
Relationonerel;
122124
intelevel;
@@ -151,7 +153,7 @@ analyze_rel(Oid relid, RangeVar *relation, int options, List *va_cols,
151153
else
152154
{
153155
onerel=NULL;
154-
if (IsAutoVacuumWorkerProcess()&&Log_autovacuum_min_duration >=0)
156+
if (IsAutoVacuumWorkerProcess()&&params->log_min_duration >=0)
155157
ereport(LOG,
156158
(errcode(ERRCODE_LOCK_NOT_AVAILABLE),
157159
errmsg("skipping analyze of \"%s\" --- lock not available",
@@ -266,14 +268,14 @@ analyze_rel(Oid relid, RangeVar *relation, int options, List *va_cols,
266268
/*
267269
* Do the normal non-recursive ANALYZE.
268270
*/
269-
do_analyze_rel(onerel,options,va_cols,acquirefunc,relpages,
271+
do_analyze_rel(onerel,options,params,va_cols,acquirefunc,relpages,
270272
false,in_outer_xact,elevel);
271273

272274
/*
273275
* If there are child tables, do recursive ANALYZE.
274276
*/
275277
if (onerel->rd_rel->relhassubclass)
276-
do_analyze_rel(onerel,options,va_cols,acquirefunc,relpages,
278+
do_analyze_rel(onerel,options,params,va_cols,acquirefunc,relpages,
277279
true,in_outer_xact,elevel);
278280

279281
/*
@@ -301,9 +303,10 @@ analyze_rel(Oid relid, RangeVar *relation, int options, List *va_cols,
301303
* appropriate acquirefunc for each child table.
302304
*/
303305
staticvoid
304-
do_analyze_rel(Relationonerel,intoptions,List*va_cols,
305-
AcquireSampleRowsFuncacquirefunc,BlockNumberrelpages,
306-
boolinh,boolin_outer_xact,intelevel)
306+
do_analyze_rel(Relationonerel,intoptions,VacuumParams*params,
307+
List*va_cols,AcquireSampleRowsFuncacquirefunc,
308+
BlockNumberrelpages,boolinh,boolin_outer_xact,
309+
intelevel)
307310
{
308311
intattr_cnt,
309312
tcnt,
@@ -359,10 +362,10 @@ do_analyze_rel(Relation onerel, int options, List *va_cols,
359362
save_nestlevel=NewGUCNestLevel();
360363

361364
/* measure elapsed time iff autovacuum logging requires it */
362-
if (IsAutoVacuumWorkerProcess()&&Log_autovacuum_min_duration >=0)
365+
if (IsAutoVacuumWorkerProcess()&&params->log_min_duration >=0)
363366
{
364367
pg_rusage_init(&ru0);
365-
if (Log_autovacuum_min_duration>0)
368+
if (params->log_min_duration>0)
366369
starttime=GetCurrentTimestamp();
367370
}
368371

@@ -647,11 +650,11 @@ do_analyze_rel(Relation onerel, int options, List *va_cols,
647650
vac_close_indexes(nindexes,Irel,NoLock);
648651

649652
/* Log the action if appropriate */
650-
if (IsAutoVacuumWorkerProcess()&&Log_autovacuum_min_duration >=0)
653+
if (IsAutoVacuumWorkerProcess()&&params->log_min_duration >=0)
651654
{
652-
if (Log_autovacuum_min_duration==0||
655+
if (params->log_min_duration==0||
653656
TimestampDifferenceExceeds(starttime,GetCurrentTimestamp(),
654-
Log_autovacuum_min_duration))
657+
params->log_min_duration))
655658
ereport(LOG,
656659
(errmsg("automatic analyze of table \"%s.%s.%s\" system usage: %s",
657660
get_database_name(MyDatabaseId),

‎src/backend/commands/vacuum.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ ExecVacuum(VacuumStmt *vacstmt, bool isTopLevel)
114114
/* user-invoked vacuum is never "for wraparound" */
115115
params.is_wraparound= false;
116116

117+
/* user-invoked vacuum never uses this parameter */
118+
params.log_min_duration=-1;
119+
117120
/* Now go through the common routine */
118121
vacuum(vacstmt->options,vacstmt->relation,InvalidOid,&params,
119122
vacstmt->va_cols,NULL,isTopLevel);
@@ -304,7 +307,7 @@ vacuum(int options, RangeVar *relation, Oid relid, VacuumParams *params,
304307
PushActiveSnapshot(GetTransactionSnapshot());
305308
}
306309

307-
analyze_rel(relid,relation,options,
310+
analyze_rel(relid,relation,options,params,
308311
va_cols,in_outer_xact,vac_strategy);
309312

310313
if (use_own_xacts)
@@ -1233,7 +1236,7 @@ vacuum_rel(Oid relid, RangeVar *relation, int options, VacuumParams *params)
12331236
else
12341237
{
12351238
onerel=NULL;
1236-
if (IsAutoVacuumWorkerProcess()&&Log_autovacuum_min_duration >=0)
1239+
if (IsAutoVacuumWorkerProcess()&&params->log_min_duration >=0)
12371240
ereport(LOG,
12381241
(errcode(ERRCODE_LOCK_NOT_AVAILABLE),
12391242
errmsg("skipping vacuum of \"%s\" --- lock not available",

‎src/backend/commands/vacuumlazy.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ lazy_vacuum_rel(Relation onerel, int options, VacuumParams *params,
196196
Assert(params!=NULL);
197197

198198
/* measure elapsed time iff autovacuum logging requires it */
199-
if (IsAutoVacuumWorkerProcess()&&Log_autovacuum_min_duration >=0)
199+
if (IsAutoVacuumWorkerProcess()&&params->log_min_duration >=0)
200200
{
201201
pg_rusage_init(&ru0);
202202
starttime=GetCurrentTimestamp();
@@ -328,13 +328,13 @@ lazy_vacuum_rel(Relation onerel, int options, VacuumParams *params,
328328
vacrelstats->new_dead_tuples);
329329

330330
/* and log the action if appropriate */
331-
if (IsAutoVacuumWorkerProcess()&&Log_autovacuum_min_duration >=0)
331+
if (IsAutoVacuumWorkerProcess()&&params->log_min_duration >=0)
332332
{
333333
TimestampTzendtime=GetCurrentTimestamp();
334334

335-
if (Log_autovacuum_min_duration==0||
335+
if (params->log_min_duration==0||
336336
TimestampDifferenceExceeds(starttime,endtime,
337-
Log_autovacuum_min_duration))
337+
params->log_min_duration))
338338
{
339339
StringInfoDatabuf;
340340
TimestampDifference(starttime,endtime,&secs,&usecs);

‎src/backend/postmaster/autovacuum.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2493,6 +2493,7 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
24932493
intmultixact_freeze_table_age;
24942494
intvac_cost_limit;
24952495
intvac_cost_delay;
2496+
intlog_min_duration;
24962497

24972498
/*
24982499
* Calculate the vacuum cost parameters and the freeze ages. If there
@@ -2515,6 +2516,11 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
25152516
?autovacuum_vac_cost_limit
25162517
:VacuumCostLimit;
25172518

2519+
/* -1 in autovac setting means use log_autovacuum_min_duration */
2520+
log_min_duration= (avopts&&avopts->log_min_duration >=0)
2521+
?avopts->log_min_duration
2522+
:Log_autovacuum_min_duration;
2523+
25182524
/* these do not have autovacuum-specific settings */
25192525
freeze_min_age= (avopts&&avopts->freeze_min_age >=0)
25202526
?avopts->freeze_min_age
@@ -2545,6 +2551,7 @@ table_recheck_autovac(Oid relid, HTAB *table_toast_map,
25452551
tab->at_params.multixact_freeze_min_age=multixact_freeze_min_age;
25462552
tab->at_params.multixact_freeze_table_age=multixact_freeze_table_age;
25472553
tab->at_params.is_wraparound=wraparound;
2554+
tab->at_params.log_min_duration=log_min_duration;
25482555
tab->at_vacuum_cost_limit=vac_cost_limit;
25492556
tab->at_vacuum_cost_delay=vac_cost_delay;
25502557
tab->at_relname=NULL;

‎src/bin/psql/tab-complete.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1788,6 +1788,7 @@ psql_completion(const char *text, int start, int end)
17881788
"autovacuum_vacuum_scale_factor",
17891789
"autovacuum_vacuum_threshold",
17901790
"fillfactor",
1791+
"log_autovacuum_min_duration",
17911792
"toast.autovacuum_enabled",
17921793
"toast.autovacuum_freeze_max_age",
17931794
"toast.autovacuum_freeze_min_age",
@@ -1799,6 +1800,7 @@ psql_completion(const char *text, int start, int end)
17991800
"toast.autovacuum_vacuum_cost_limit",
18001801
"toast.autovacuum_vacuum_scale_factor",
18011802
"toast.autovacuum_vacuum_threshold",
1803+
"toast.log_autovacuum_min_duration",
18021804
"user_catalog_table",
18031805
NULL
18041806
};

‎src/include/commands/vacuum.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ typedef struct VacuumParams
142142
intmultixact_freeze_table_age;/* multixact age at which to
143143
* scan whole table */
144144
boolis_wraparound;/* force a for-wraparound vacuum */
145+
intlog_min_duration;/* minimum execution threshold in ms at
146+
* which verbose logs are activated,
147+
* -1 to use default */
145148
}VacuumParams;
146149

147150
/* GUC parameters */
@@ -191,7 +194,7 @@ extern void lazy_vacuum_rel(Relation onerel, int options,
191194

192195
/* in commands/analyze.c */
193196
externvoidanalyze_rel(Oidrelid,RangeVar*relation,intoptions,
194-
List*va_cols,boolin_outer_xact,
197+
VacuumParams*params,List*va_cols,boolin_outer_xact,
195198
BufferAccessStrategybstrategy);
196199
externboolstd_typanalyze(VacAttrStats*stats);
197200
externdoubleanl_random_fract(void);

‎src/include/utils/rel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ typedef struct AutoVacOpts
209209
intmultixact_freeze_min_age;
210210
intmultixact_freeze_max_age;
211211
intmultixact_freeze_table_age;
212+
intlog_min_duration;
212213
float8vacuum_scale_factor;
213214
float8analyze_scale_factor;
214215
}AutoVacOpts;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp