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)
 
bool AutoVacuumRequestWork (AutoVacuumWorkItemType type, Oid relationId, BlockNumber blkno)
 
Size AutoVacuumShmemSize (void)
 
void AutoVacuumShmemInit (void)
 

Variables

PGDLLIMPORT bool autovacuum_start_daemon
 
PGDLLIMPORT int autovacuum_max_workers
 
PGDLLIMPORT int autovacuum_work_mem
 
PGDLLIMPORT int autovacuum_naptime
 
PGDLLIMPORT int autovacuum_vac_thresh
 
PGDLLIMPORT double autovacuum_vac_scale
 
PGDLLIMPORT int autovacuum_vac_ins_thresh
 
PGDLLIMPORT double autovacuum_vac_ins_scale
 
PGDLLIMPORT int autovacuum_anl_thresh
 
PGDLLIMPORT double autovacuum_anl_scale
 
PGDLLIMPORT int autovacuum_freeze_max_age
 
PGDLLIMPORT int autovacuum_multixact_freeze_max_age
 
PGDLLIMPORT double autovacuum_vac_cost_delay
 
PGDLLIMPORT int autovacuum_vac_cost_limit
 
PGDLLIMPORT int AutovacuumLauncherPid
 
PGDLLIMPORT 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 3377 of file autovacuum.c.

3378 {
3380  ereport(WARNING,
3381  (errmsg("autovacuum not started because of misconfiguration"),
3382  errhint("Enable the \"track_counts\" option.")));
3383 }
bool autovacuum_start_daemon
Definition: autovacuum.c:116
int errhint(const char *fmt,...)
Definition: elog.c:1316
int errmsg(const char *fmt,...)
Definition: elog.c:1069
#define WARNING
Definition: elog.h:36
#define ereport(elevel,...)
Definition: elog.h:149
bool pgstat_track_counts
Definition: pgstat.c:187

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

Referenced by PostmasterMain().

◆ AutoVacuumingActive()

bool AutoVacuumingActive ( void  )

Definition at line 3323 of file autovacuum.c.

3324 {
3326  return false;
3327  return true;
3328 }

References autovacuum_start_daemon, and pgstat_track_counts.

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

◆ AutoVacuumRequestWork()

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

Definition at line 3335 of file autovacuum.c.

3337 {
3338  int i;
3339  bool result = false;
3340 
3341  LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE);
3342 
3343  /*
3344  * Locate an unused work item and fill it with the given data.
3345  */
3346  for (i = 0; i < NUM_WORKITEMS; i++)
3347  {
3349 
3350  if (workitem->avw_used)
3351  continue;
3352 
3353  workitem->avw_used = true;
3354  workitem->avw_active = false;
3355  workitem->avw_type = type;
3356  workitem->avw_database = MyDatabaseId;
3357  workitem->avw_relation = relationId;
3358  workitem->avw_blockNumber = blkno;
3359  result = true;
3360 
3361  /* done */
3362  break;
3363  }
3364 
3365  LWLockRelease(AutovacuumLock);
3366 
3367  return result;
3368 }
#define NUM_WORKITEMS
Definition: autovacuum.c:272
static AutoVacuumShmemStruct * AutoVacuumShmem
Definition: autovacuum.c:303
Oid MyDatabaseId
Definition: globals.c:89
int i
Definition: isn.c:73
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
Definition: lwlock.c:1195
void LWLockRelease(LWLock *lock)
Definition: lwlock.c:1808
@ LW_EXCLUSIVE
Definition: lwlock.h:116
AutoVacuumWorkItem av_workItems[NUM_WORKITEMS]
Definition: autovacuum.c:299
BlockNumber avw_blockNumber
Definition: autovacuum.c:269
AutoVacuumWorkItemType avw_type
Definition: autovacuum.c:264
const char * type

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 type.

Referenced by brininsert().

◆ AutoVacuumShmemInit()

void AutoVacuumShmemInit ( void  )

Definition at line 3427 of file autovacuum.c.

3428 {
3429  bool found;
3430 
3432  ShmemInitStruct("AutoVacuum Data",
3434  &found);
3435 
3436  if (!IsUnderPostmaster)
3437  {
3438  WorkerInfo worker;
3439  int i;
3440 
3441  Assert(!found);
3442 
3447  memset(AutoVacuumShmem->av_workItems, 0,
3448  sizeof(AutoVacuumWorkItem) * NUM_WORKITEMS);
3449 
3450  worker = (WorkerInfo) ((char *) AutoVacuumShmem +
3451  MAXALIGN(sizeof(AutoVacuumShmemStruct)));
3452 
3453  /* initialize the WorkerInfo free list */
3454  for (i = 0; i < autovacuum_max_workers; i++)
3455  {
3457  &worker[i].wi_links);
3458  pg_atomic_init_flag(&worker[i].wi_dobalance);
3459  }
3460 
3462 
3463  }
3464  else
3465  Assert(found);
3466 }
static void pg_atomic_init_u32(volatile pg_atomic_uint32 *ptr, uint32 val)
Definition: atomics.h:218
static void pg_atomic_init_flag(volatile pg_atomic_flag *ptr)
Definition: atomics.h:167
Size AutoVacuumShmemSize(void)
Definition: autovacuum.c:3408
int autovacuum_max_workers
Definition: autovacuum.c:117
struct WorkerInfoData * WorkerInfo
Definition: autovacuum.c:242
#define MAXALIGN(LEN)
Definition: c.h:800
bool IsUnderPostmaster
Definition: globals.c:113
static void dlist_init(dlist_head *head)
Definition: ilist.h:314
static void dlist_push_head(dlist_head *head, dlist_node *node)
Definition: ilist.h:347
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:296
WorkerInfo av_startingWorker
Definition: autovacuum.c:298
pg_atomic_uint32 av_nworkersForBalance
Definition: autovacuum.c:300
dlist_head av_runningWorkers
Definition: autovacuum.c:297

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

Referenced by CreateSharedMemoryAndSemaphores().

◆ AutoVacuumShmemSize()

Size AutoVacuumShmemSize ( void  )

Definition at line 3408 of file autovacuum.c.

3409 {
3410  Size size;
3411 
3412  /*
3413  * Need the fixed struct and the array of WorkerInfoData.
3414  */
3415  size = sizeof(AutoVacuumShmemStruct);
3416  size = MAXALIGN(size);
3418  sizeof(WorkerInfoData)));
3419  return size;
3420 }
size_t Size
Definition: c.h:594
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().

◆ AutoVacWorkerFailed()

void AutoVacWorkerFailed ( void  )

Definition at line 1417 of file autovacuum.c.

1418 {
1420 }
@ AutoVacForkFailed
Definition: autovacuum.c:251
sig_atomic_t av_signal[AutoVacNumSignals]
Definition: autovacuum.c:294

References AutoVacForkFailed, AutoVacuumShmem, and AutoVacuumShmemStruct::av_signal.

Referenced by StartAutovacuumWorker().

◆ IsAutoVacuumLauncherProcess()

bool IsAutoVacuumLauncherProcess ( void  )

Definition at line 3391 of file autovacuum.c.

3392 {
3393  return am_autovacuum_launcher;
3394 }
static bool am_autovacuum_launcher
Definition: autovacuum.c:139

References am_autovacuum_launcher.

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

◆ IsAutoVacuumWorkerProcess()

◆ StartAutoVacLauncher()

int StartAutoVacLauncher ( void  )

◆ StartAutoVacWorker()

int StartAutoVacWorker ( void  )

Definition at line 1477 of file autovacuum.c.

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 }
NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn()
Definition: autovacuum.c:1515
#define LOG
Definition: elog.h:31
pid_t fork_process(void)
Definition: fork_process.c:32
void InitPostmasterChild(void)
Definition: miscinit.c:95
void ClosePostmasterPorts(bool am_syslogger)
Definition: postmaster.c:2549

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

Referenced by StartAutovacuumWorker().

Variable Documentation

◆ autovacuum_anl_scale

PGDLLIMPORT double autovacuum_anl_scale
extern

Definition at line 125 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_anl_thresh

PGDLLIMPORT int autovacuum_anl_thresh
extern

Definition at line 124 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_freeze_max_age

PGDLLIMPORT int autovacuum_freeze_max_age
extern

◆ autovacuum_max_workers

◆ autovacuum_multixact_freeze_max_age

PGDLLIMPORT int autovacuum_multixact_freeze_max_age
extern

◆ autovacuum_naptime

PGDLLIMPORT int autovacuum_naptime
extern

◆ autovacuum_start_daemon

PGDLLIMPORT bool autovacuum_start_daemon
extern

Definition at line 116 of file autovacuum.c.

Referenced by autovac_init(), and AutoVacuumingActive().

◆ autovacuum_vac_cost_delay

PGDLLIMPORT double autovacuum_vac_cost_delay
extern

Definition at line 129 of file autovacuum.c.

Referenced by VacuumUpdateCosts().

◆ autovacuum_vac_cost_limit

PGDLLIMPORT int autovacuum_vac_cost_limit
extern

Definition at line 130 of file autovacuum.c.

Referenced by AutoVacuumUpdateCostLimit().

◆ autovacuum_vac_ins_scale

PGDLLIMPORT double autovacuum_vac_ins_scale
extern

Definition at line 123 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_vac_ins_thresh

PGDLLIMPORT int autovacuum_vac_ins_thresh
extern

Definition at line 122 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_vac_scale

PGDLLIMPORT double autovacuum_vac_scale
extern

Definition at line 121 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_vac_thresh

PGDLLIMPORT int autovacuum_vac_thresh
extern

Definition at line 120 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_work_mem

PGDLLIMPORT int autovacuum_work_mem
extern

Definition at line 118 of file autovacuum.c.

Referenced by dead_items_max_items(), and ginInsertCleanup().

◆ AutovacuumLauncherPid

PGDLLIMPORT int AutovacuumLauncherPid
extern

Definition at line 316 of file autovacuum.c.

Referenced by FreeWorkerInfo(), and ProcKill().

◆ Log_autovacuum_min_duration

PGDLLIMPORT int Log_autovacuum_min_duration
extern

Definition at line 132 of file autovacuum.c.

Referenced by table_recheck_autovac().