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.

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 3305 of file autovacuum.c.

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

Referenced by PostmasterMain().

3306 {
3308  ereport(WARNING,
3309  (errmsg("autovacuum not started because of misconfiguration"),
3310  errhint("Enable the \"track_counts\" option.")));
3311 }
int errhint(const char *fmt,...)
Definition: elog.c:1068
bool autovacuum_start_daemon
Definition: autovacuum.c:114
bool pgstat_track_counts
Definition: pgstat.c:126
#define WARNING
Definition: elog.h:40
#define ereport(elevel,...)
Definition: elog.h:144
int errmsg(const char *fmt,...)
Definition: elog.c:821

◆ AutoVacuumingActive()

bool AutoVacuumingActive ( void  )

Definition at line 3251 of file autovacuum.c.

References autovacuum_start_daemon, and pgstat_track_counts.

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

3252 {
3254  return false;
3255  return true;
3256 }
bool autovacuum_start_daemon
Definition: autovacuum.c:114
bool pgstat_track_counts
Definition: pgstat.c:126

◆ AutoVacuumRequestWork()

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

Definition at line 3263 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().

3265 {
3266  int i;
3267  bool result = false;
3268 
3269  LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE);
3270 
3271  /*
3272  * Locate an unused work item and fill it with the given data.
3273  */
3274  for (i = 0; i < NUM_WORKITEMS; i++)
3275  {
3277 
3278  if (workitem->avw_used)
3279  continue;
3280 
3281  workitem->avw_used = true;
3282  workitem->avw_active = false;
3283  workitem->avw_type = type;
3284  workitem->avw_database = MyDatabaseId;
3285  workitem->avw_relation = relationId;
3286  workitem->avw_blockNumber = blkno;
3287  result = true;
3288 
3289  /* done */
3290  break;
3291  }
3292 
3293  LWLockRelease(AutovacuumLock);
3294 
3295  return result;
3296 }
AutoVacuumWorkItemType avw_type
Definition: autovacuum.c:256
#define NUM_WORKITEMS
Definition: autovacuum.c:264
void LWLockRelease(LWLock *lock)
Definition: lwlock.c:1812
AutoVacuumWorkItem av_workItems[NUM_WORKITEMS]
Definition: autovacuum.c:289
Oid MyDatabaseId
Definition: globals.c:85
BlockNumber avw_blockNumber
Definition: autovacuum.c:261
static AutoVacuumShmemStruct * AutoVacuumShmem
Definition: autovacuum.c:292
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
Definition: lwlock.c:1208
int i

◆ AutoVacuumShmemInit()

void AutoVacuumShmemInit ( void  )

Definition at line 3355 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().

3356 {
3357  bool found;
3358 
3360  ShmemInitStruct("AutoVacuum Data",
3362  &found);
3363 
3364  if (!IsUnderPostmaster)
3365  {
3366  WorkerInfo worker;
3367  int i;
3368 
3369  Assert(!found);
3370 
3375  memset(AutoVacuumShmem->av_workItems, 0,
3376  sizeof(AutoVacuumWorkItem) * NUM_WORKITEMS);
3377 
3378  worker = (WorkerInfo) ((char *) AutoVacuumShmem +
3379  MAXALIGN(sizeof(AutoVacuumShmemStruct)));
3380 
3381  /* initialize the WorkerInfo free list */
3382  for (i = 0; i < autovacuum_max_workers; i++)
3384  &worker[i].wi_links);
3385  }
3386  else
3387  Assert(found);
3388 }
#define NUM_WORKITEMS
Definition: autovacuum.c:264
WorkerInfo av_startingWorker
Definition: autovacuum.c:288
dlist_head av_freeWorkers
Definition: autovacuum.c:286
static void dlist_push_head(dlist_head *head, dlist_node *node)
Definition: ilist.h:300
struct WorkerInfoData * WorkerInfo
Definition: autovacuum.c:234
dlist_node wi_links
Definition: autovacuum.c:222
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
Definition: shmem.c:392
AutoVacuumWorkItem av_workItems[NUM_WORKITEMS]
Definition: autovacuum.c:289
bool IsUnderPostmaster
Definition: globals.c:109
Size AutoVacuumShmemSize(void)
Definition: autovacuum.c:3336
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:746
static AutoVacuumShmemStruct * AutoVacuumShmem
Definition: autovacuum.c:292
#define MAXALIGN(LEN)
Definition: c.h:699
int i
dlist_head av_runningWorkers
Definition: autovacuum.c:287

◆ AutoVacuumShmemSize()

Size AutoVacuumShmemSize ( void  )

Definition at line 3336 of file autovacuum.c.

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

Referenced by AutoVacuumShmemInit(), and CreateSharedMemoryAndSemaphores().

3337 {
3338  Size size;
3339 
3340  /*
3341  * Need the fixed struct and the array of WorkerInfoData.
3342  */
3343  size = sizeof(AutoVacuumShmemStruct);
3344  size = MAXALIGN(size);
3346  sizeof(WorkerInfoData)));
3347  return size;
3348 }
Size mul_size(Size s1, Size s2)
Definition: shmem.c:515
Size add_size(Size s1, Size s2)
Definition: shmem.c:498
int autovacuum_max_workers
Definition: autovacuum.c:115
size_t Size
Definition: c.h:474
#define MAXALIGN(LEN)
Definition: c.h:699

◆ AutoVacuumUpdateDelay()

void AutoVacuumUpdateDelay ( void  )

Definition at line 1775 of file autovacuum.c.

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

Referenced by do_autovacuum(), and vacuum_delay_point().

1776 {
1777  if (MyWorkerInfo)
1778  {
1781  }
1782 }
double wi_cost_delay
Definition: autovacuum.c:229
int VacuumCostLimit
Definition: globals.c:141
static WorkerInfo MyWorkerInfo
Definition: autovacuum.c:302
double VacuumCostDelay
Definition: globals.c:142

◆ AutoVacWorkerFailed()

void AutoVacWorkerFailed ( void  )

Definition at line 1412 of file autovacuum.c.

References AutoVacForkFailed, and AutoVacuumShmemStruct::av_signal.

Referenced by StartAutovacuumWorker().

1413 {
1415 }
sig_atomic_t av_signal[AutoVacNumSignals]
Definition: autovacuum.c:284
static AutoVacuumShmemStruct * AutoVacuumShmem
Definition: autovacuum.c:292

◆ IsAutoVacuumLauncherProcess()

bool IsAutoVacuumLauncherProcess ( void  )

Definition at line 3319 of file autovacuum.c.

References am_autovacuum_launcher.

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

3320 {
3321  return am_autovacuum_launcher;
3322 }
static bool am_autovacuum_launcher
Definition: autovacuum.c:140

◆ IsAutoVacuumWorkerProcess()

◆ StartAutoVacLauncher()

int StartAutoVacLauncher ( void  )

Referenced by reaper(), and ServerLoop().

◆ StartAutoVacWorker()

int StartAutoVacWorker ( void  )

Definition at line 1472 of file autovacuum.c.

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

Referenced by StartAutovacuumWorker().

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

Variable Documentation

◆ autovacuum_anl_scale

double autovacuum_anl_scale

Definition at line 123 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_anl_thresh

int autovacuum_anl_thresh

Definition at line 122 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 125 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

double autovacuum_vac_cost_delay

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

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

Definition at line 121 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_vac_ins_thresh

int autovacuum_vac_ins_thresh

Definition at line 120 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ 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 compute_max_dead_tuples(), and ginInsertCleanup().

◆ AutovacuumLauncherPid

int AutovacuumLauncherPid

Definition at line 305 of file autovacuum.c.

Referenced by FreeWorkerInfo(), and ProcKill().

◆ Log_autovacuum_min_duration

int Log_autovacuum_min_duration

Definition at line 130 of file autovacuum.c.

Referenced by table_recheck_autovac().