mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Restructure autovacuum in two processes: a dummy process, which runs
continuously, and requests vacuum runs of "autovacuum workers" to postmaster. The workers do the actual vacuum work. This allows for future improvements, like allowing multiple autovacuum jobs running in parallel. For now, the code keeps the original behavior of having a single autovac process at any time by sleeping until the previous worker has finished.
This commit is contained in:
@ -13,7 +13,7 @@
|
||||
*
|
||||
* Copyright (c) 2001-2007, PostgreSQL Global Development Group
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.146 2007/02/09 16:12:18 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.147 2007/02/15 23:23:23 alvherre Exp $
|
||||
* ----------
|
||||
*/
|
||||
#include "postgres.h"
|
||||
@ -930,7 +930,7 @@ pgstat_report_vacuum(Oid tableoid, bool shared,
|
||||
msg.m_databaseid = shared ? InvalidOid : MyDatabaseId;
|
||||
msg.m_tableoid = tableoid;
|
||||
msg.m_analyze = analyze;
|
||||
msg.m_autovacuum = IsAutoVacuumProcess(); /* is this autovacuum? */
|
||||
msg.m_autovacuum = IsAutoVacuumWorkerProcess(); /* is this autovacuum? */
|
||||
msg.m_vacuumtime = GetCurrentTimestamp();
|
||||
msg.m_tuples = tuples;
|
||||
pgstat_send(&msg, sizeof(msg));
|
||||
@ -955,7 +955,7 @@ pgstat_report_analyze(Oid tableoid, bool shared, PgStat_Counter livetuples,
|
||||
pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_ANALYZE);
|
||||
msg.m_databaseid = shared ? InvalidOid : MyDatabaseId;
|
||||
msg.m_tableoid = tableoid;
|
||||
msg.m_autovacuum = IsAutoVacuumProcess(); /* is this autovacuum? */
|
||||
msg.m_autovacuum = IsAutoVacuumWorkerProcess(); /* is this autovacuum? */
|
||||
msg.m_analyzetime = GetCurrentTimestamp();
|
||||
msg.m_live_tuples = livetuples;
|
||||
msg.m_dead_tuples = deadtuples;
|
||||
@ -2280,8 +2280,8 @@ backend_read_statsfile(void)
|
||||
return;
|
||||
Assert(!pgStatRunningInCollector);
|
||||
|
||||
/* Autovacuum wants stats about all databases */
|
||||
if (IsAutoVacuumProcess())
|
||||
/* Autovacuum launcher wants stats about all databases */
|
||||
if (IsAutoVacuumLauncherProcess())
|
||||
pgStatDBHash = pgstat_read_statsfile(InvalidOid);
|
||||
else
|
||||
pgStatDBHash = pgstat_read_statsfile(MyDatabaseId);
|
||||
@ -2319,8 +2319,8 @@ pgstat_setup_memcxt(void)
|
||||
void
|
||||
pgstat_clear_snapshot(void)
|
||||
{
|
||||
/* In an autovacuum process we keep the stats forever */
|
||||
if (IsAutoVacuumProcess())
|
||||
/* In an autovacuum worker process we keep the stats forever */
|
||||
if (IsAutoVacuumWorkerProcess())
|
||||
return;
|
||||
|
||||
/* Release memory, if any was allocated */
|
||||
|
Reference in New Issue
Block a user