pg.ddx.io  pgsql-patches@postgresql.org mailing list archive  
help / color / mirror / Atom feed
Is autovacuum doing a wraparound-avoiding VACUUM?
6+ messages / 3 participants
[nested] [flat]

* Is autovacuum doing a wraparound-avoiding VACUUM?
@ 2008-07-16 16:55 Simon Riggs <simon@2ndquadrant.com>
  2008-07-17 21:10 ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Alvaro Herrera <alvherre@commandprompt.com>
  0 siblings, 1 reply; 6+ messages in thread

From: Simon Riggs @ 2008-07-16 16:55 UTC (permalink / raw)
  To: pgsql-patches


Is autovacuum doing a wraparound-avoiding VACUUM?
Currently, no easy way to tell.

Patch to change message of autovac in pg_stat_activity when we are
performing an anti-wraparound VACUUM.

We will then be able to explain why an autovacuum process doesn't get
cancelled, like we might otherwise hope it would be.

That way we can tell difference between hung and just important.

Perhaps message should say "non-automatically cancelled VACUUM
<tablename>", but that sounded more obscure than the phrase I selected.

Discuss...

-- 
 Simon Riggs           www.2ndQuadrant.com
 PostgreSQL Training, Services and Support

Attachments:

wraparound_msg.v1.patch (text/x-patch, 2.8K) download Index: src/backend/postmaster/autovacuum.c =================================================================== RCS file: /home/sriggs/pg/REPOSITORY/pgsql/src/backend/postmaster/autovacuum.c,v retrieving revision 1.80 diff -c -r1.80 autovacuum.c *** src/backend/postmaster/autovacuum.c 1 Jul 2008 02:09:34 -0000 1.80 --- src/backend/postmaster/autovacuum.c 16 Jul 2008 16:23:36 -0000 *************** *** 290,296 **** static PgStat_StatTabEntry *get_pgstat_tabentry_relid(Oid relid, bool isshared, PgStat_StatDBEntry *shared, PgStat_StatDBEntry *dbentry); ! static void autovac_report_activity(VacuumStmt *vacstmt, Oid relid); static void avl_sighup_handler(SIGNAL_ARGS); static void avl_sigusr1_handler(SIGNAL_ARGS); static void avl_sigterm_handler(SIGNAL_ARGS); --- 290,296 ---- static PgStat_StatTabEntry *get_pgstat_tabentry_relid(Oid relid, bool isshared, PgStat_StatDBEntry *shared, PgStat_StatDBEntry *dbentry); ! static void autovac_report_activity(VacuumStmt *vacstmt, Oid relid, bool for_wraparound); static void avl_sighup_handler(SIGNAL_ARGS); static void avl_sigusr1_handler(SIGNAL_ARGS); static void avl_sigterm_handler(SIGNAL_ARGS); *************** *** 2626,2632 **** vacstmt.va_cols = NIL; /* Let pgstat know what we're doing */ ! autovac_report_activity(&vacstmt, relid); vacuum(&vacstmt, relid, bstrategy, for_wraparound, true); } --- 2626,2632 ---- vacstmt.va_cols = NIL; /* Let pgstat know what we're doing */ ! autovac_report_activity(&vacstmt, relid, for_wraparound); vacuum(&vacstmt, relid, bstrategy, for_wraparound, true); } *************** *** 2643,2649 **** * bother to report "<IDLE>" or some such. */ static void ! autovac_report_activity(VacuumStmt *vacstmt, Oid relid) { char *relname = get_rel_name(relid); char *nspname = get_namespace_name(get_rel_namespace(relid)); --- 2643,2649 ---- * bother to report "<IDLE>" or some such. */ static void ! autovac_report_activity(VacuumStmt *vacstmt, Oid relid, bool for_wraparound) { char *relname = get_rel_name(relid); char *nspname = get_namespace_name(get_rel_namespace(relid)); *************** *** 2652,2658 **** char activity[MAX_AUTOVAC_ACTIV_LEN]; /* Report the command and possible options */ ! if (vacstmt->vacuum) snprintf(activity, MAX_AUTOVAC_ACTIV_LEN, "autovacuum: VACUUM%s", vacstmt->analyze ? " ANALYZE" : ""); --- 2652,2661 ---- char activity[MAX_AUTOVAC_ACTIV_LEN]; /* Report the command and possible options */ ! if (for_wraparound) ! snprintf(activity, MAX_AUTOVAC_ACTIV_LEN, ! "autovacuum: VACUUM to avoid wraparound of "); ! else if (vacstmt->vacuum) snprintf(activity, MAX_AUTOVAC_ACTIV_LEN, "autovacuum: VACUUM%s", vacstmt->analyze ? " ANALYZE" : "");
^ permalink raw reply [nested|flat] 6+ messages in thread

* Re: Is autovacuum doing a wraparound-avoiding VACUUM?
  2008-07-16 16:55 Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
@ 2008-07-17 21:10 ` Alvaro Herrera <alvherre@commandprompt.com>
  2008-07-17 23:02   ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
  0 siblings, 1 reply; 6+ messages in thread

From: Alvaro Herrera @ 2008-07-17 21:10 UTC (permalink / raw)
  To: Simon Riggs <simon@2ndquadrant.com>; +Cc: pgsql-patches

Simon Riggs wrote:
> 
> Is autovacuum doing a wraparound-avoiding VACUUM?
> Currently, no easy way to tell.
> 
> Patch to change message of autovac in pg_stat_activity when we are
> performing an anti-wraparound VACUUM.

I just obsoleted this patch.  The new patch should be easier to do
though -- just a one line change I think.

I don't like your wording though; it feels too verbose (and you're
losing the ANALYZE in case it's doing both things).  How about 

	snprintf(activity, MAX_AUTOVAC_ACTIV_LEN,
		"autovacuum: VACUUM%s%s", vac
		tab->at_doanalyze ? " ANALYZE" : "",
		tab->at_wraparound ? " (wraparound)" : "");

You're not proposing it for 8.3 right?

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support



^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Is autovacuum doing a wraparound-avoiding VACUUM?
  2008-07-16 16:55 Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
  2008-07-17 21:10 ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Alvaro Herrera <alvherre@commandprompt.com>
@ 2008-07-17 23:02   ` Simon Riggs <simon@2ndquadrant.com>
  2008-07-18 05:44     ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Tom Lane <tgl@sss.pgh.pa.us>
  0 siblings, 1 reply; 6+ messages in thread

From: Simon Riggs @ 2008-07-17 23:02 UTC (permalink / raw)
  To: Alvaro Herrera <alvherre@commandprompt.com>; +Cc: pgsql-patches


On Thu, 2008-07-17 at 17:10 -0400, Alvaro Herrera wrote:
> Simon Riggs wrote:
> > 
> > Is autovacuum doing a wraparound-avoiding VACUUM?
> > Currently, no easy way to tell.
> > 
> > Patch to change message of autovac in pg_stat_activity when we are
> > performing an anti-wraparound VACUUM.
> 
> I just obsoleted this patch.  The new patch should be easier to do
> though -- just a one line change I think.
> 
> I don't like your wording though; it feels too verbose (and you're
> losing the ANALYZE in case it's doing both things).  How about 
> 
> 	snprintf(activity, MAX_AUTOVAC_ACTIV_LEN,
> 		"autovacuum: VACUUM%s%s", vac
> 		tab->at_doanalyze ? " ANALYZE" : "",
> 		tab->at_wraparound ? " (wraparound)" : "");

Yes, looks good.

Losing the ANALYZE was conscious, but in retrospect is something we
might live to regret. Yours is better.

> You're not proposing it for 8.3 right?

I think I am. It's an important diagnostic for your other fix.

We need to be able to tell the difference between a wraparound and other
weird situations.

-- 
 Simon Riggs           www.2ndQuadrant.com
 PostgreSQL Training, Services and Support




^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Is autovacuum doing a wraparound-avoiding VACUUM?
  2008-07-16 16:55 Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
  2008-07-17 21:10 ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Alvaro Herrera <alvherre@commandprompt.com>
  2008-07-17 23:02   ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
@ 2008-07-18 05:44     ` Tom Lane <tgl@sss.pgh.pa.us>
  2008-07-19 08:04       ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
  0 siblings, 1 reply; 6+ messages in thread

From: Tom Lane @ 2008-07-18 05:44 UTC (permalink / raw)
  To: Simon Riggs <simon@2ndquadrant.com>; +Cc: Alvaro Herrera <alvherre@commandprompt.com>; pgsql-patches

Simon Riggs <simon@2ndquadrant.com> writes:
> On Thu, 2008-07-17 at 17:10 -0400, Alvaro Herrera wrote:
>> I don't like your wording though; it feels too verbose (and you're
>> losing the ANALYZE in case it's doing both things).  How about 
>> 
>> snprintf(activity, MAX_AUTOVAC_ACTIV_LEN,
>> "autovacuum: VACUUM%s%s", vac
>> tab->at_doanalyze ? " ANALYZE" : "",
>> tab->at_wraparound ? " (wraparound)" : "");

> Yes, looks good.

May I suggest "(to prevent wraparound)" or something like that?
Otherwise, +1.

>> You're not proposing it for 8.3 right?

> I think I am. It's an important diagnostic for your other fix.

I agree, this is important for visibility into what's happening.
The string isn't getting translated so I don't see any big downside
to applying the patch in back branches.

			regards, tom lane



^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Is autovacuum doing a wraparound-avoiding VACUUM?
  2008-07-16 16:55 Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
  2008-07-17 21:10 ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Alvaro Herrera <alvherre@commandprompt.com>
  2008-07-17 23:02   ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
  2008-07-18 05:44     ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Tom Lane <tgl@sss.pgh.pa.us>
@ 2008-07-19 08:04       ` Simon Riggs <simon@2ndquadrant.com>
  2008-07-21 15:28         ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Alvaro Herrera <alvherre@commandprompt.com>
  0 siblings, 1 reply; 6+ messages in thread

From: Simon Riggs @ 2008-07-19 08:04 UTC (permalink / raw)
  To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: Alvaro Herrera <alvherre@commandprompt.com>; pgsql-patches


On Fri, 2008-07-18 at 01:44 -0400, Tom Lane wrote:
> Simon Riggs <simon@2ndquadrant.com> writes:
> > On Thu, 2008-07-17 at 17:10 -0400, Alvaro Herrera wrote:
> >> I don't like your wording though; it feels too verbose (and you're
> >> losing the ANALYZE in case it's doing both things).  How about 
> >> 
> >> snprintf(activity, MAX_AUTOVAC_ACTIV_LEN,
> >> "autovacuum: VACUUM%s%s", vac
> >> tab->at_doanalyze ? " ANALYZE" : "",
> >> tab->at_wraparound ? " (wraparound)" : "");
> 
> > Yes, looks good.
> 
> May I suggest "(to prevent wraparound)" or something like that?
> Otherwise, +1.
> 
> >> You're not proposing it for 8.3 right?
> 
> > I think I am. It's an important diagnostic for your other fix.
> 
> I agree, this is important for visibility into what's happening.
> The string isn't getting translated so I don't see any big downside
> to applying the patch in back branches.

Patches for 8.3 and CVS HEAD.

-- 
 Simon Riggs           www.2ndQuadrant.com
 PostgreSQL Training, Services and Support

Attachments: download all (2 files, .tar.gz)

wraparound_msg.v2.CVS_HEAD.patch (text/x-patch, 1.0K) download Index: src/backend/postmaster/autovacuum.c =================================================================== RCS file: /home/sriggs/pg/REPOSITORY/pgsql/src/backend/postmaster/autovacuum.c,v retrieving revision 1.81 diff -c -r1.81 autovacuum.c *** src/backend/postmaster/autovacuum.c 17 Jul 2008 21:02:31 -0000 1.81 --- src/backend/postmaster/autovacuum.c 19 Jul 2008 07:58:33 -0000 *************** *** 2657,2664 **** /* Report the command and possible options */ if (tab->at_dovacuum) snprintf(activity, MAX_AUTOVAC_ACTIV_LEN, ! "autovacuum: VACUUM%s", ! tab->at_doanalyze ? " ANALYZE" : ""); else snprintf(activity, MAX_AUTOVAC_ACTIV_LEN, "autovacuum: ANALYZE"); --- 2657,2665 ---- /* Report the command and possible options */ if (tab->at_dovacuum) snprintf(activity, MAX_AUTOVAC_ACTIV_LEN, ! "autovacuum: VACUUM%s%s", ! tab->at_doanalyze ? " ANALYZE" : "", ! tab->at_wraparound ? " (to prevent wraparound)" : ""); else snprintf(activity, MAX_AUTOVAC_ACTIV_LEN, "autovacuum: ANALYZE");
wraparound_msg.v2.REL8_3_STABLE.patch (text/x-patch, 2.8K) download Index: src/backend/postmaster/autovacuum.c =================================================================== RCS file: /home/sriggs/pg/REPOSITORY/pgsql/src/backend/postmaster/autovacuum.c,v retrieving revision 1.71.2.4 diff -c -r1.71.2.4 autovacuum.c *** src/backend/postmaster/autovacuum.c 17 Jul 2008 21:02:41 -0000 1.71.2.4 --- src/backend/postmaster/autovacuum.c 19 Jul 2008 07:58:43 -0000 *************** *** 291,297 **** static PgStat_StatTabEntry *get_pgstat_tabentry_relid(Oid relid, bool isshared, PgStat_StatDBEntry *shared, PgStat_StatDBEntry *dbentry); ! static void autovac_report_activity(VacuumStmt *vacstmt, Oid relid); static void avl_sighup_handler(SIGNAL_ARGS); static void avl_sigusr1_handler(SIGNAL_ARGS); static void avl_sigterm_handler(SIGNAL_ARGS); --- 291,297 ---- static PgStat_StatTabEntry *get_pgstat_tabentry_relid(Oid relid, bool isshared, PgStat_StatDBEntry *shared, PgStat_StatDBEntry *dbentry); ! static void autovac_report_activity(VacuumStmt *vacstmt, Oid relid, bool for_wraparound); static void avl_sighup_handler(SIGNAL_ARGS); static void avl_sigusr1_handler(SIGNAL_ARGS); static void avl_sigterm_handler(SIGNAL_ARGS); *************** *** 2633,2639 **** MemoryContextSwitchTo(old_cxt); /* Let pgstat know what we're doing */ ! autovac_report_activity(&vacstmt, relid); vacuum(&vacstmt, relids, bstrategy, for_wraparound, true); } --- 2633,2639 ---- MemoryContextSwitchTo(old_cxt); /* Let pgstat know what we're doing */ ! autovac_report_activity(&vacstmt, relid, for_wraparound); vacuum(&vacstmt, relids, bstrategy, for_wraparound, true); } *************** *** 2650,2656 **** * bother to report "<IDLE>" or some such. */ static void ! autovac_report_activity(VacuumStmt *vacstmt, Oid relid) { char *relname = get_rel_name(relid); char *nspname = get_namespace_name(get_rel_namespace(relid)); --- 2650,2656 ---- * bother to report "<IDLE>" or some such. */ static void ! autovac_report_activity(VacuumStmt *vacstmt, Oid relid, bool for_wraparound) { char *relname = get_rel_name(relid); char *nspname = get_namespace_name(get_rel_namespace(relid)); *************** *** 2661,2668 **** /* Report the command and possible options */ if (vacstmt->vacuum) snprintf(activity, MAX_AUTOVAC_ACTIV_LEN, ! "autovacuum: VACUUM%s", ! vacstmt->analyze ? " ANALYZE" : ""); else snprintf(activity, MAX_AUTOVAC_ACTIV_LEN, "autovacuum: ANALYZE"); --- 2661,2669 ---- /* Report the command and possible options */ if (vacstmt->vacuum) snprintf(activity, MAX_AUTOVAC_ACTIV_LEN, ! "autovacuum: VACUUM%s%s", ! vacstmt->analyze ? " ANALYZE" : "", ! for_wraparound ? " (to prevent wraparound)" : ""); else snprintf(activity, MAX_AUTOVAC_ACTIV_LEN, "autovacuum: ANALYZE");
^ permalink raw reply [nested|flat] 6+ messages in thread

* Re: Is autovacuum doing a wraparound-avoiding VACUUM?
  2008-07-16 16:55 Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
  2008-07-17 21:10 ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Alvaro Herrera <alvherre@commandprompt.com>
  2008-07-17 23:02   ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
  2008-07-18 05:44     ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Tom Lane <tgl@sss.pgh.pa.us>
  2008-07-19 08:04       ` Re: Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
@ 2008-07-21 15:28         ` Alvaro Herrera <alvherre@commandprompt.com>
  0 siblings, 0 replies; 6+ messages in thread

From: Alvaro Herrera @ 2008-07-21 15:28 UTC (permalink / raw)
  To: Simon Riggs <simon@2ndquadrant.com>; +Cc: Tom Lane <tgl@sss.pgh.pa.us>; pgsql-patches

Simon Riggs wrote:

> On Fri, 2008-07-18 at 01:44 -0400, Tom Lane wrote:
> > I agree, this is important for visibility into what's happening.
> > The string isn't getting translated so I don't see any big downside
> > to applying the patch in back branches.
> 
> Patches for 8.3 and CVS HEAD.

Applied, thanks.

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.



^ permalink  raw  reply  [nested|flat] 6+ messages in thread


end of thread, other threads:[~2008-07-21 15:28 UTC | newest]

Thread overview: 6+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2008-07-16 16:55 Is autovacuum doing a wraparound-avoiding VACUUM? Simon Riggs <simon@2ndquadrant.com>
2008-07-17 21:10 ` Alvaro Herrera <alvherre@commandprompt.com>
2008-07-17 23:02   ` Simon Riggs <simon@2ndquadrant.com>
2008-07-18 05:44     ` Tom Lane <tgl@sss.pgh.pa.us>
2008-07-19 08:04       ` Simon Riggs <simon@2ndquadrant.com>
2008-07-21 15:28         ` Alvaro Herrera <alvherre@commandprompt.com>

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox