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

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

3305 {
3307  ereport(WARNING,
3308  (errmsg("autovacuum not started because of misconfiguration"),
3309  errhint("Enable the \"track_counts\" option.")));
3310 }
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 3250 of file autovacuum.c.

3251 {
3253  return false;
3254  return true;
3255 }

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

3264 {
3265  int i;
3266  bool result = false;
3267 
3268  LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE);
3269 
3270  /*
3271  * Locate an unused work item and fill it with the given data.
3272  */
3273  for (i = 0; i < NUM_WORKITEMS; i++)
3274  {
3276 
3277  if (workitem->avw_used)
3278  continue;
3279 
3280  workitem->avw_used = true;
3281  workitem->avw_active = false;
3282  workitem->avw_type = type;
3283  workitem->avw_database = MyDatabaseId;
3284  workitem->avw_relation = relationId;
3285  workitem->avw_blockNumber = blkno;
3286  result = true;
3287 
3288  /* done */
3289  break;
3290  }
3291 
3292  LWLockRelease(AutovacuumLock);
3293 
3294  return result;
3295 }
#define NUM_WORKITEMS
Definition: autovacuum.c:263
static AutoVacuumShmemStruct * AutoVacuumShmem
Definition: autovacuum.c:291
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:1803
@ LW_EXCLUSIVE
Definition: lwlock.h:115
AutoVacuumWorkItem av_workItems[NUM_WORKITEMS]
Definition: autovacuum.c:288
BlockNumber avw_blockNumber
Definition: autovacuum.c:260
AutoVacuumWorkItemType avw_type
Definition: autovacuum.c:255

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

3355 {
3356  bool found;
3357 
3359  ShmemInitStruct("AutoVacuum Data",
3361  &found);
3362 
3363  if (!IsUnderPostmaster)
3364  {
3365  WorkerInfo worker;
3366  int i;
3367 
3368  Assert(!found);
3369 
3374  memset(AutoVacuumShmem->av_workItems, 0,
3375  sizeof(AutoVacuumWorkItem) * NUM_WORKITEMS);
3376 
3377  worker = (WorkerInfo) ((char *) AutoVacuumShmem +
3378  MAXALIGN(sizeof(AutoVacuumShmemStruct)));
3379 
3380  /* initialize the WorkerInfo free list */
3381  for (i = 0; i < autovacuum_max_workers; i++)
3383  &worker[i].wi_links);
3384  }
3385  else
3386  Assert(found);
3387 }
Size AutoVacuumShmemSize(void)
Definition: autovacuum.c:3335
int autovacuum_max_workers
Definition: autovacuum.c:117
struct WorkerInfoData * WorkerInfo
Definition: autovacuum.c:233
#define MAXALIGN(LEN)
Definition: c.h:795
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:285
WorkerInfo av_startingWorker
Definition: autovacuum.c:287
dlist_head av_runningWorkers
Definition: autovacuum.c:286

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

3336 {
3337  Size size;
3338 
3339  /*
3340  * Need the fixed struct and the array of WorkerInfoData.
3341  */
3342  size = sizeof(AutoVacuumShmemStruct);
3343  size = MAXALIGN(size);
3345  sizeof(WorkerInfoData)));
3346  return size;
3347 }
size_t Size
Definition: c.h:589
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 1781 of file autovacuum.c.

1782 {
1783  if (MyWorkerInfo)
1784  {
1787  }
1788 }
static WorkerInfo MyWorkerInfo
Definition: autovacuum.c:301
int VacuumCostLimit
Definition: globals.c:145
double VacuumCostDelay
Definition: globals.c:146
double wi_cost_delay
Definition: autovacuum.c:228

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

1412 {
1414 }
@ AutoVacForkFailed
Definition: autovacuum.c:242
sig_atomic_t av_signal[AutoVacNumSignals]
Definition: autovacuum.c:283

References AutoVacForkFailed, AutoVacuumShmem, and AutoVacuumShmemStruct::av_signal.

Referenced by StartAutovacuumWorker().

◆ IsAutoVacuumLauncherProcess()

bool IsAutoVacuumLauncherProcess ( void  )

Definition at line 3318 of file autovacuum.c.

3319 {
3320  return am_autovacuum_launcher;
3321 }
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 1471 of file autovacuum.c.

1472 {
1473  pid_t worker_pid;
1474 
1475 #ifdef EXEC_BACKEND
1476  switch ((worker_pid = avworker_forkexec()))
1477 #else
1478  switch ((worker_pid = fork_process()))
1479 #endif
1480  {
1481  case -1:
1482  ereport(LOG,
1483  (errmsg("could not fork autovacuum worker process: %m")));
1484  return 0;
1485 
1486 #ifndef EXEC_BACKEND
1487  case 0:
1488  /* in postmaster child ... */
1490 
1491  /* Close the postmaster's sockets */
1492  ClosePostmasterPorts(false);
1493 
1494  AutoVacWorkerMain(0, NULL);
1495  break;
1496 #endif
1497  default:
1498  return (int) worker_pid;
1499  }
1500 
1501  /* shouldn't get here */
1502  return 0;
1503 }
NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn()
Definition: autovacuum.c:1509
#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:2574

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 autovac_balance_cost(), and table_recheck_autovac().

◆ autovacuum_vac_cost_limit

PGDLLIMPORT int autovacuum_vac_cost_limit
extern

Definition at line 130 of file autovacuum.c.

Referenced by autovac_balance_cost(), and table_recheck_autovac().

◆ 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 304 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().