PostgreSQL Source Code  git master
autovacuum.h File Reference
#include "storage/block.h"
Include dependency graph for autovacuum.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define IsAnyAutoVacuumProcess()   (IsAutoVacuumLauncherProcess() || IsAutoVacuumWorkerProcess())
 

Enumerations

enum  AutoVacuumWorkItemType { AVW_BRINSummarizeRange }
 

Functions

bool AutoVacuumingActive (void)
 
bool IsAutoVacuumLauncherProcess (void)
 
bool IsAutoVacuumWorkerProcess (void)
 
void autovac_init (void)
 
int StartAutoVacLauncher (void)
 
int StartAutoVacWorker (void)
 
void AutoVacWorkerFailed (void)
 
void AutoVacuumUpdateDelay (void)
 
void AutoVacuumRequestWork (AutoVacuumWorkItemType type, Oid relationId, BlockNumber blkno)
 
Size AutoVacuumShmemSize (void)
 
void AutoVacuumShmemInit (void)
 

Variables

bool autovacuum_start_daemon
 
int autovacuum_max_workers
 
int autovacuum_work_mem
 
int autovacuum_naptime
 
int autovacuum_vac_thresh
 
double autovacuum_vac_scale
 
int autovacuum_anl_thresh
 
double autovacuum_anl_scale
 
int autovacuum_freeze_max_age
 
int autovacuum_multixact_freeze_max_age
 
int autovacuum_vac_cost_delay
 
int autovacuum_vac_cost_limit
 
int AutovacuumLauncherPid
 
int Log_autovacuum_min_duration
 

Macro Definition Documentation

◆ IsAnyAutoVacuumProcess

#define IsAnyAutoVacuumProcess ( )    (IsAutoVacuumLauncherProcess() || IsAutoVacuumWorkerProcess())

Definition at line 53 of file autovacuum.h.

Referenced by InitProcess().

Enumeration Type Documentation

◆ AutoVacuumWorkItemType

Enumerator
AVW_BRINSummarizeRange 

Definition at line 23 of file autovacuum.h.

Function Documentation

◆ autovac_init()

void autovac_init ( void  )

Definition at line 3236 of file autovacuum.c.

References autovacuum_start_daemon, ereport, errhint(), errmsg(), pgstat_track_counts, and WARNING.

Referenced by PostmasterMain().

3237 {
3239  ereport(WARNING,
3240  (errmsg("autovacuum not started because of misconfiguration"),
3241  errhint("Enable the \"track_counts\" option.")));
3242 }
int errhint(const char *fmt,...)
Definition: elog.c:987
bool autovacuum_start_daemon
Definition: autovacuum.c:114
bool pgstat_track_counts
Definition: pgstat.c:126
#define ereport(elevel, rest)
Definition: elog.h:122
#define WARNING
Definition: elog.h:40
int errmsg(const char *fmt,...)
Definition: elog.c:797

◆ AutoVacuumingActive()

bool AutoVacuumingActive ( void  )

Definition at line 3187 of file autovacuum.c.

References autovacuum_start_daemon, and pgstat_track_counts.

Referenced by AutoVacLauncherMain(), reaper(), relation_needs_vacanalyze(), and ServerLoop().

3188 {
3190  return false;
3191  return true;
3192 }
bool autovacuum_start_daemon
Definition: autovacuum.c:114
bool pgstat_track_counts
Definition: pgstat.c:126

◆ AutoVacuumRequestWork()

void AutoVacuumRequestWork ( AutoVacuumWorkItemType  type,
Oid  relationId,
BlockNumber  blkno 
)

Definition at line 3198 of file autovacuum.c.

References AutoVacuumShmemStruct::av_workItems, AutoVacuumWorkItem::avw_active, AutoVacuumWorkItem::avw_blockNumber, AutoVacuumWorkItem::avw_database, AutoVacuumWorkItem::avw_relation, AutoVacuumWorkItem::avw_type, AutoVacuumWorkItem::avw_used, i, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), MyDatabaseId, NUM_WORKITEMS, and generate_unaccent_rules::type.

Referenced by brininsert().

3200 {
3201  int i;
3202 
3203  LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE);
3204 
3205  /*
3206  * Locate an unused work item and fill it with the given data.
3207  */
3208  for (i = 0; i < NUM_WORKITEMS; i++)
3209  {
3211 
3212  if (workitem->avw_used)
3213  continue;
3214 
3215  workitem->avw_used = true;
3216  workitem->avw_active = false;
3217  workitem->avw_type = type;
3218  workitem->avw_database = MyDatabaseId;
3219  workitem->avw_relation = relationId;
3220  workitem->avw_blockNumber = blkno;
3221 
3222  /* done */
3223  break;
3224  }
3225 
3226  LWLockRelease(AutovacuumLock);
3227 }
AutoVacuumWorkItemType avw_type
Definition: autovacuum.c:257
#define NUM_WORKITEMS
Definition: autovacuum.c:265
void LWLockRelease(LWLock *lock)
Definition: lwlock.c:1722
AutoVacuumWorkItem av_workItems[NUM_WORKITEMS]
Definition: autovacuum.c:290
Oid MyDatabaseId
Definition: globals.c:77
BlockNumber avw_blockNumber
Definition: autovacuum.c:262
static AutoVacuumShmemStruct * AutoVacuumShmem
Definition: autovacuum.c:293
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
Definition: lwlock.c:1118
int i

◆ AutoVacuumShmemInit()

void AutoVacuumShmemInit ( void  )

Definition at line 3286 of file autovacuum.c.

References Assert, autovacuum_max_workers, AutoVacuumShmemSize(), AutoVacuumShmemStruct::av_freeWorkers, AutoVacuumShmemStruct::av_launcherpid, AutoVacuumShmemStruct::av_runningWorkers, AutoVacuumShmemStruct::av_startingWorker, AutoVacuumShmemStruct::av_workItems, dlist_init(), dlist_push_head(), i, IsUnderPostmaster, MAXALIGN, NUM_WORKITEMS, ShmemInitStruct(), and WorkerInfoData::wi_links.

Referenced by CreateSharedMemoryAndSemaphores().

3287 {
3288  bool found;
3289 
3291  ShmemInitStruct("AutoVacuum Data",
3293  &found);
3294 
3295  if (!IsUnderPostmaster)
3296  {
3297  WorkerInfo worker;
3298  int i;
3299 
3300  Assert(!found);
3301 
3306  memset(AutoVacuumShmem->av_workItems, 0,
3307  sizeof(AutoVacuumWorkItem) * NUM_WORKITEMS);
3308 
3309  worker = (WorkerInfo) ((char *) AutoVacuumShmem +
3310  MAXALIGN(sizeof(AutoVacuumShmemStruct)));
3311 
3312  /* initialize the WorkerInfo free list */
3313  for (i = 0; i < autovacuum_max_workers; i++)
3315  &worker[i].wi_links);
3316  }
3317  else
3318  Assert(found);
3319 }
#define NUM_WORKITEMS
Definition: autovacuum.c:265
WorkerInfo av_startingWorker
Definition: autovacuum.c:289
dlist_head av_freeWorkers
Definition: autovacuum.c:287
static void dlist_push_head(dlist_head *head, dlist_node *node)
Definition: ilist.h:300
struct WorkerInfoData * WorkerInfo
Definition: autovacuum.c:235
dlist_node wi_links
Definition: autovacuum.c:223
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
Definition: shmem.c:372
AutoVacuumWorkItem av_workItems[NUM_WORKITEMS]
Definition: autovacuum.c:290
bool IsUnderPostmaster
Definition: globals.c:101
Size AutoVacuumShmemSize(void)
Definition: autovacuum.c:3267
int autovacuum_max_workers
Definition: autovacuum.c:115
static void dlist_init(dlist_head *head)
Definition: ilist.h:278
#define Assert(condition)
Definition: c.h:670
static AutoVacuumShmemStruct * AutoVacuumShmem
Definition: autovacuum.c:293
#define MAXALIGN(LEN)
Definition: c.h:623
int i
dlist_head av_runningWorkers
Definition: autovacuum.c:288

◆ AutoVacuumShmemSize()

Size AutoVacuumShmemSize ( void  )

Definition at line 3267 of file autovacuum.c.

References add_size(), autovacuum_max_workers, MAXALIGN, and mul_size().

Referenced by AutoVacuumShmemInit(), and CreateSharedMemoryAndSemaphores().

3268 {
3269  Size size;
3270 
3271  /*
3272  * Need the fixed struct and the array of WorkerInfoData.
3273  */
3274  size = sizeof(AutoVacuumShmemStruct);
3275  size = MAXALIGN(size);
3277  sizeof(WorkerInfoData)));
3278  return size;
3279 }
Size mul_size(Size s1, Size s2)
Definition: shmem.c:492
Size add_size(Size s1, Size s2)
Definition: shmem.c:475
int autovacuum_max_workers
Definition: autovacuum.c:115
size_t Size
Definition: c.h:404
#define MAXALIGN(LEN)
Definition: c.h:623

◆ AutoVacuumUpdateDelay()

void AutoVacuumUpdateDelay ( void  )

Definition at line 1760 of file autovacuum.c.

References VacuumCostDelay, VacuumCostLimit, WorkerInfoData::wi_cost_delay, and WorkerInfoData::wi_cost_limit.

Referenced by do_autovacuum(), and vacuum_delay_point().

1761 {
1762  if (MyWorkerInfo)
1763  {
1766  }
1767 }
int VacuumCostLimit
Definition: globals.c:131
static WorkerInfo MyWorkerInfo
Definition: autovacuum.c:303
int VacuumCostDelay
Definition: globals.c:132

◆ AutoVacWorkerFailed()

void AutoVacWorkerFailed ( void  )

Definition at line 1393 of file autovacuum.c.

References AutoVacForkFailed, and AutoVacuumShmemStruct::av_signal.

Referenced by StartAutovacuumWorker().

1394 {
1396 }
sig_atomic_t av_signal[AutoVacNumSignals]
Definition: autovacuum.c:285
static AutoVacuumShmemStruct * AutoVacuumShmem
Definition: autovacuum.c:293

◆ IsAutoVacuumLauncherProcess()

bool IsAutoVacuumLauncherProcess ( void  )

Definition at line 3250 of file autovacuum.c.

References am_autovacuum_launcher.

Referenced by autovac_refresh_stats(), backend_read_statsfile(), InitPostgres(), InitProcess(), pgstat_bestart(), and ProcKill().

3251 {
3252  return am_autovacuum_launcher;
3253 }
static bool am_autovacuum_launcher
Definition: autovacuum.c:138

◆ IsAutoVacuumWorkerProcess()

◆ StartAutoVacLauncher()

int StartAutoVacLauncher ( void  )

Definition at line 395 of file autovacuum.c.

References AutoVacLauncherMain(), AutoVacPID, ClosePostmasterPorts(), ereport, errmsg(), fork_process(), InitPostmasterChild(), LOG, and NON_EXEC_STATIC.

Referenced by reaper(), and ServerLoop().

396 {
397  pid_t AutoVacPID;
398 
399 #ifdef EXEC_BACKEND
400  switch ((AutoVacPID = avlauncher_forkexec()))
401 #else
402  switch ((AutoVacPID = fork_process()))
403 #endif
404  {
405  case -1:
406  ereport(LOG,
407  (errmsg("could not fork autovacuum launcher process: %m")));
408  return 0;
409 
410 #ifndef EXEC_BACKEND
411  case 0:
412  /* in postmaster child ... */
414 
415  /* Close the postmaster's sockets */
416  ClosePostmasterPorts(false);
417 
418  AutoVacLauncherMain(0, NULL);
419  break;
420 #endif
421  default:
422  return (int) AutoVacPID;
423  }
424 
425  /* shouldn't get here */
426  return 0;
427 }
void InitPostmasterChild(void)
Definition: miscinit.c:176
NON_EXEC_STATIC void AutoVacLauncherMain(int argc, char *argv[]) pg_attribute_noreturn()
Definition: autovacuum.c:433
pid_t fork_process(void)
Definition: fork_process.c:31
#define LOG
Definition: elog.h:26
void ClosePostmasterPorts(bool am_syslogger)
Definition: postmaster.c:2499
#define ereport(elevel, rest)
Definition: elog.h:122
static pid_t AutoVacPID
Definition: postmaster.c:253
int errmsg(const char *fmt,...)
Definition: elog.c:797

◆ StartAutoVacWorker()

int StartAutoVacWorker ( void  )

Definition at line 1477 of file autovacuum.c.

References AutoVacWorkerMain(), ClosePostmasterPorts(), ereport, errmsg(), fork_process(), InitPostmasterChild(), LOG, and NON_EXEC_STATIC.

Referenced by StartAutovacuumWorker().

1478 {
1479  pid_t worker_pid;
1480 
1481 #ifdef EXEC_BACKEND
1482  switch ((worker_pid = avworker_forkexec()))
1483 #else
1484  switch ((worker_pid = fork_process()))
1485 #endif
1486  {
1487  case -1:
1488  ereport(LOG,
1489  (errmsg("could not fork autovacuum worker process: %m")));
1490  return 0;
1491 
1492 #ifndef EXEC_BACKEND
1493  case 0:
1494  /* in postmaster child ... */
1496 
1497  /* Close the postmaster's sockets */
1498  ClosePostmasterPorts(false);
1499 
1500  AutoVacWorkerMain(0, NULL);
1501  break;
1502 #endif
1503  default:
1504  return (int) worker_pid;
1505  }
1506 
1507  /* shouldn't get here */
1508  return 0;
1509 }
void InitPostmasterChild(void)
Definition: miscinit.c:176
pid_t fork_process(void)
Definition: fork_process.c:31
#define LOG
Definition: elog.h:26
NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn()
Definition: autovacuum.c:1515
void ClosePostmasterPorts(bool am_syslogger)
Definition: postmaster.c:2499
#define ereport(elevel, rest)
Definition: elog.h:122
int errmsg(const char *fmt,...)
Definition: elog.c:797

Variable Documentation

◆ autovacuum_anl_scale

double autovacuum_anl_scale

Definition at line 121 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_anl_thresh

int autovacuum_anl_thresh

Definition at line 120 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_freeze_max_age

int autovacuum_freeze_max_age

◆ autovacuum_max_workers

◆ autovacuum_multixact_freeze_max_age

int autovacuum_multixact_freeze_max_age

Definition at line 123 of file autovacuum.c.

Referenced by MultiXactMemberFreezeThreshold(), and SetMultiXactIdLimit().

◆ autovacuum_naptime

int autovacuum_naptime

◆ autovacuum_start_daemon

bool autovacuum_start_daemon

Definition at line 114 of file autovacuum.c.

Referenced by autovac_init(), and AutoVacuumingActive().

◆ autovacuum_vac_cost_delay

int autovacuum_vac_cost_delay

Definition at line 125 of file autovacuum.c.

Referenced by autovac_balance_cost(), and table_recheck_autovac().

◆ autovacuum_vac_cost_limit

int autovacuum_vac_cost_limit

Definition at line 126 of file autovacuum.c.

Referenced by autovac_balance_cost(), and table_recheck_autovac().

◆ autovacuum_vac_scale

double autovacuum_vac_scale

Definition at line 119 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_vac_thresh

int autovacuum_vac_thresh

Definition at line 118 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_work_mem

int autovacuum_work_mem

Definition at line 116 of file autovacuum.c.

Referenced by ginInsertCleanup(), and lazy_space_alloc().

◆ AutovacuumLauncherPid

int AutovacuumLauncherPid

Definition at line 306 of file autovacuum.c.

Referenced by FreeWorkerInfo(), and ProcKill().

◆ Log_autovacuum_min_duration

int Log_autovacuum_min_duration

Definition at line 128 of file autovacuum.c.

Referenced by table_recheck_autovac().