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
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" : "");
-- 
Sent via pgsql-patches mailing list (pgsql-patches@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-patches

Reply via email to