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)
 
bool 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_vac_ins_thresh
 
double autovacuum_vac_ins_scale
 
int autovacuum_anl_thresh
 
double autovacuum_anl_scale
 
int autovacuum_freeze_max_age
 
int autovacuum_multixact_freeze_max_age
 
double 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 55 of file autovacuum.h.

Enumeration Type Documentation

◆ AutoVacuumWorkItemType

Enumerator
AVW_BRINSummarizeRange 

Definition at line 23 of file autovacuum.h.

24 {
AutoVacuumWorkItemType
Definition: autovacuum.h:24
@ AVW_BRINSummarizeRange
Definition: autovacuum.h:25

Function Documentation

◆ autovac_init()

void autovac_init ( void  )

Definition at line 3391 of file autovacuum.c.

3392 {
3394  ereport(WARNING,
3395  (errmsg("autovacuum not started because of misconfiguration"),
3396  errhint("Enable the \"track_counts\" option.")));
3397 }
bool autovacuum_start_daemon
Definition: autovacuum.c:114
int errhint(const char *fmt,...)
Definition: elog.c:1156
int errmsg(const char *fmt,...)
Definition: elog.c:909
#define WARNING
Definition: elog.h:30
#define ereport(elevel,...)
Definition: elog.h:143
bool pgstat_track_counts
Definition: pgstat.c:111

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

Referenced by PostmasterMain().

◆ AutoVacuumingActive()

bool AutoVacuumingActive ( void  )

Definition at line 3337 of file autovacuum.c.

3338 {
3340  return false;
3341  return true;
3342 }

References autovacuum_start_daemon, and pgstat_track_counts.

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

◆ AutoVacuumRequestWork()

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

Definition at line 3349 of file autovacuum.c.

3351 {
3352  int i;
3353  bool result = false;
3354 
3355  LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE);
3356 
3357  /*
3358  * Locate an unused work item and fill it with the given data.
3359  */
3360  for (i = 0; i < NUM_WORKITEMS; i++)
3361  {
3363 
3364  if (workitem->avw_used)
3365  continue;
3366 
3367  workitem->avw_used = true;
3368  workitem->avw_active = false;
3369  workitem->avw_type = type;
3370  workitem->avw_database = MyDatabaseId;
3371  workitem->avw_relation = relationId;
3372  workitem->avw_blockNumber = blkno;
3373  result = true;
3374 
3375  /* done */
3376  break;
3377  }
3378 
3379  LWLockRelease(AutovacuumLock);
3380 
3381  return result;
3382 }
#define NUM_WORKITEMS
Definition: autovacuum.c:264
static AutoVacuumShmemStruct * AutoVacuumShmem
Definition: autovacuum.c:292
Oid MyDatabaseId
Definition: globals.c:88
int i
Definition: isn.c:73
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
Definition: lwlock.c:1199
void LWLockRelease(LWLock *lock)
Definition: lwlock.c:1803
@ LW_EXCLUSIVE
Definition: lwlock.h:104
AutoVacuumWorkItem av_workItems[NUM_WORKITEMS]
Definition: autovacuum.c:289
BlockNumber avw_blockNumber
Definition: autovacuum.c:261
AutoVacuumWorkItemType avw_type
Definition: autovacuum.c:256

References AutoVacuumShmem, 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().

◆ AutoVacuumShmemInit()

void AutoVacuumShmemInit ( void  )

Definition at line 3441 of file autovacuum.c.

3442 {
3443  bool found;
3444 
3446  ShmemInitStruct("AutoVacuum Data",
3448  &found);
3449 
3450  if (!IsUnderPostmaster)
3451  {
3452  WorkerInfo worker;
3453  int i;
3454 
3455  Assert(!found);
3456 
3461  memset(AutoVacuumShmem->av_workItems, 0,
3462  sizeof(AutoVacuumWorkItem) * NUM_WORKITEMS);
3463 
3464  worker = (WorkerInfo) ((char *) AutoVacuumShmem +
3465  MAXALIGN(sizeof(AutoVacuumShmemStruct)));
3466 
3467  /* initialize the WorkerInfo free list */
3468  for (i = 0; i < autovacuum_max_workers; i++)
3470  &worker[i].wi_links);
3471  }
3472  else
3473  Assert(found);
3474 }
Size AutoVacuumShmemSize(void)
Definition: autovacuum.c:3422
int autovacuum_max_workers
Definition: autovacuum.c:115
struct WorkerInfoData * WorkerInfo
Definition: autovacuum.c:234
#define MAXALIGN(LEN)
Definition: c.h:757
bool IsUnderPostmaster
Definition: globals.c:112
static void dlist_init(dlist_head *head)
Definition: ilist.h:278
static void dlist_push_head(dlist_head *head, dlist_node *node)
Definition: ilist.h:300
Assert(fmt[strlen(fmt) - 1] !='\n')
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
Definition: shmem.c:396
dlist_head av_freeWorkers
Definition: autovacuum.c:286
WorkerInfo av_startingWorker
Definition: autovacuum.c:288
dlist_head av_runningWorkers
Definition: autovacuum.c:287

References Assert(), autovacuum_max_workers, AutoVacuumShmem, 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().

◆ AutoVacuumShmemSize()

Size AutoVacuumShmemSize ( void  )

Definition at line 3422 of file autovacuum.c.

3423 {
3424  Size size;
3425 
3426  /*
3427  * Need the fixed struct and the array of WorkerInfoData.
3428  */
3429  size = sizeof(AutoVacuumShmemStruct);
3430  size = MAXALIGN(size);
3432  sizeof(WorkerInfoData)));
3433  return size;
3434 }
size_t Size
Definition: c.h:540
Size add_size(Size s1, Size s2)
Definition: shmem.c:502
Size mul_size(Size s1, Size s2)
Definition: shmem.c:519

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

Referenced by AutoVacuumShmemInit(), and CalculateShmemSize().

◆ AutoVacuumUpdateDelay()

void AutoVacuumUpdateDelay ( void  )

Definition at line 1784 of file autovacuum.c.

1785 {
1786  if (MyWorkerInfo)
1787  {
1790  }
1791 }
static WorkerInfo MyWorkerInfo
Definition: autovacuum.c:302
int VacuumCostLimit
Definition: globals.c:144
double VacuumCostDelay
Definition: globals.c:145
double wi_cost_delay
Definition: autovacuum.c:229

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

Referenced by do_autovacuum(), and vacuum_delay_point().

◆ AutoVacWorkerFailed()

void AutoVacWorkerFailed ( void  )

Definition at line 1421 of file autovacuum.c.

1422 {
1424 }
@ AutoVacForkFailed
Definition: autovacuum.c:243
sig_atomic_t av_signal[AutoVacNumSignals]
Definition: autovacuum.c:284

References AutoVacForkFailed, AutoVacuumShmem, and AutoVacuumShmemStruct::av_signal.

Referenced by StartAutovacuumWorker().

◆ IsAutoVacuumLauncherProcess()

bool IsAutoVacuumLauncherProcess ( void  )

Definition at line 3405 of file autovacuum.c.

3406 {
3407  return am_autovacuum_launcher;
3408 }
static bool am_autovacuum_launcher
Definition: autovacuum.c:140

References am_autovacuum_launcher.

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

◆ IsAutoVacuumWorkerProcess()

◆ StartAutoVacLauncher()

int StartAutoVacLauncher ( void  )

Referenced by reaper(), and ServerLoop().

◆ StartAutoVacWorker()

int StartAutoVacWorker ( void  )

Definition at line 1481 of file autovacuum.c.

1482 {
1483  pid_t worker_pid;
1484 
1485 #ifdef EXEC_BACKEND
1486  switch ((worker_pid = avworker_forkexec()))
1487 #else
1488  switch ((worker_pid = fork_process()))
1489 #endif
1490  {
1491  case -1:
1492  ereport(LOG,
1493  (errmsg("could not fork autovacuum worker process: %m")));
1494  return 0;
1495 
1496 #ifndef EXEC_BACKEND
1497  case 0:
1498  /* in postmaster child ... */
1500 
1501  /* Close the postmaster's sockets */
1502  ClosePostmasterPorts(false);
1503 
1504  AutoVacWorkerMain(0, NULL);
1505  break;
1506 #endif
1507  default:
1508  return (int) worker_pid;
1509  }
1510 
1511  /* shouldn't get here */
1512  return 0;
1513 }
NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn()
Definition: autovacuum.c:1519
#define LOG
Definition: elog.h:25
pid_t fork_process(void)
Definition: fork_process.c:29
void InitPostmasterChild(void)
Definition: miscinit.c:94
void ClosePostmasterPorts(bool am_syslogger)
Definition: postmaster.c:2637

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

Referenced by StartAutovacuumWorker().

Variable Documentation

◆ autovacuum_anl_scale

double autovacuum_anl_scale
extern

Definition at line 123 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_anl_thresh

int autovacuum_anl_thresh
extern

Definition at line 122 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_freeze_max_age

int autovacuum_freeze_max_age
extern

◆ autovacuum_max_workers

◆ autovacuum_multixact_freeze_max_age

int autovacuum_multixact_freeze_max_age
extern

◆ autovacuum_naptime

int autovacuum_naptime
extern

◆ autovacuum_start_daemon

bool autovacuum_start_daemon
extern

Definition at line 114 of file autovacuum.c.

Referenced by autovac_init(), and AutoVacuumingActive().

◆ autovacuum_vac_cost_delay

double autovacuum_vac_cost_delay
extern

Definition at line 127 of file autovacuum.c.

Referenced by autovac_balance_cost(), and table_recheck_autovac().

◆ autovacuum_vac_cost_limit

int autovacuum_vac_cost_limit
extern

Definition at line 128 of file autovacuum.c.

Referenced by autovac_balance_cost(), and table_recheck_autovac().

◆ autovacuum_vac_ins_scale

double autovacuum_vac_ins_scale
extern

Definition at line 121 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_vac_ins_thresh

int autovacuum_vac_ins_thresh
extern

Definition at line 120 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_vac_scale

double autovacuum_vac_scale
extern

Definition at line 119 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_vac_thresh

int autovacuum_vac_thresh
extern

Definition at line 118 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_work_mem

int autovacuum_work_mem
extern

Definition at line 116 of file autovacuum.c.

Referenced by dead_items_max_items(), and ginInsertCleanup().

◆ AutovacuumLauncherPid

int AutovacuumLauncherPid
extern

Definition at line 305 of file autovacuum.c.

Referenced by FreeWorkerInfo(), and ProcKill().

◆ Log_autovacuum_min_duration

int Log_autovacuum_min_duration
extern

Definition at line 130 of file autovacuum.c.

Referenced by table_recheck_autovac().