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

3290 {
3292  ereport(WARNING,
3293  (errmsg("autovacuum not started because of misconfiguration"),
3294  errhint("Enable the \"track_counts\" option.")));
3295 }
bool autovacuum_start_daemon
Definition: autovacuum.c:115
int errhint(const char *fmt,...)
Definition: elog.c:1151
int errmsg(const char *fmt,...)
Definition: elog.c:904
#define WARNING
Definition: elog.h:30
#define ereport(elevel,...)
Definition: elog.h:143
bool pgstat_track_counts
Definition: pgstat.c:185

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

Referenced by PostmasterMain().

◆ AutoVacuumingActive()

bool AutoVacuumingActive ( void  )

Definition at line 3235 of file autovacuum.c.

3236 {
3238  return false;
3239  return true;
3240 }

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

3249 {
3250  int i;
3251  bool result = false;
3252 
3253  LWLockAcquire(AutovacuumLock, LW_EXCLUSIVE);
3254 
3255  /*
3256  * Locate an unused work item and fill it with the given data.
3257  */
3258  for (i = 0; i < NUM_WORKITEMS; i++)
3259  {
3261 
3262  if (workitem->avw_used)
3263  continue;
3264 
3265  workitem->avw_used = true;
3266  workitem->avw_active = false;
3267  workitem->avw_type = type;
3268  workitem->avw_database = MyDatabaseId;
3269  workitem->avw_relation = relationId;
3270  workitem->avw_blockNumber = blkno;
3271  result = true;
3272 
3273  /* done */
3274  break;
3275  }
3276 
3277  LWLockRelease(AutovacuumLock);
3278 
3279  return result;
3280 }
#define NUM_WORKITEMS
Definition: autovacuum.c:262
static AutoVacuumShmemStruct * AutoVacuumShmem
Definition: autovacuum.c:290
Oid MyDatabaseId
Definition: globals.c:89
int i
Definition: isn.c:73
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
Definition: lwlock.c:1196
void LWLockRelease(LWLock *lock)
Definition: lwlock.c:1800
@ LW_EXCLUSIVE
Definition: lwlock.h:104
AutoVacuumWorkItem av_workItems[NUM_WORKITEMS]
Definition: autovacuum.c:287
BlockNumber avw_blockNumber
Definition: autovacuum.c:259
AutoVacuumWorkItemType avw_type
Definition: autovacuum.c:254

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

3340 {
3341  bool found;
3342 
3344  ShmemInitStruct("AutoVacuum Data",
3346  &found);
3347 
3348  if (!IsUnderPostmaster)
3349  {
3350  WorkerInfo worker;
3351  int i;
3352 
3353  Assert(!found);
3354 
3359  memset(AutoVacuumShmem->av_workItems, 0,
3360  sizeof(AutoVacuumWorkItem) * NUM_WORKITEMS);
3361 
3362  worker = (WorkerInfo) ((char *) AutoVacuumShmem +
3363  MAXALIGN(sizeof(AutoVacuumShmemStruct)));
3364 
3365  /* initialize the WorkerInfo free list */
3366  for (i = 0; i < autovacuum_max_workers; i++)
3368  &worker[i].wi_links);
3369  }
3370  else
3371  Assert(found);
3372 }
Size AutoVacuumShmemSize(void)
Definition: autovacuum.c:3320
int autovacuum_max_workers
Definition: autovacuum.c:116
struct WorkerInfoData * WorkerInfo
Definition: autovacuum.c:232
#define MAXALIGN(LEN)
Definition: c.h:757
bool IsUnderPostmaster
Definition: globals.c:113
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:284
WorkerInfo av_startingWorker
Definition: autovacuum.c:286
dlist_head av_runningWorkers
Definition: autovacuum.c:285

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

3321 {
3322  Size size;
3323 
3324  /*
3325  * Need the fixed struct and the array of WorkerInfoData.
3326  */
3327  size = sizeof(AutoVacuumShmemStruct);
3328  size = MAXALIGN(size);
3330  sizeof(WorkerInfoData)));
3331  return size;
3332 }
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 1779 of file autovacuum.c.

1780 {
1781  if (MyWorkerInfo)
1782  {
1785  }
1786 }
static WorkerInfo MyWorkerInfo
Definition: autovacuum.c:300
int VacuumCostLimit
Definition: globals.c:145
double VacuumCostDelay
Definition: globals.c:146
double wi_cost_delay
Definition: autovacuum.c:227

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

1411 {
1413 }
@ AutoVacForkFailed
Definition: autovacuum.c:241
sig_atomic_t av_signal[AutoVacNumSignals]
Definition: autovacuum.c:282

References AutoVacForkFailed, AutoVacuumShmem, and AutoVacuumShmemStruct::av_signal.

Referenced by StartAutovacuumWorker().

◆ IsAutoVacuumLauncherProcess()

bool IsAutoVacuumLauncherProcess ( void  )

Definition at line 3303 of file autovacuum.c.

3304 {
3305  return am_autovacuum_launcher;
3306 }
static bool am_autovacuum_launcher
Definition: autovacuum.c:138

References am_autovacuum_launcher.

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

◆ IsAutoVacuumWorkerProcess()

◆ StartAutoVacLauncher()

int StartAutoVacLauncher ( void  )

Referenced by reaper(), and ServerLoop().

◆ StartAutoVacWorker()

int StartAutoVacWorker ( void  )

Definition at line 1470 of file autovacuum.c.

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

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

Referenced by relation_needs_vacanalyze().

◆ autovacuum_anl_thresh

PGDLLIMPORT int autovacuum_anl_thresh
extern

Definition at line 123 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 115 of file autovacuum.c.

Referenced by autovac_init(), and AutoVacuumingActive().

◆ autovacuum_vac_cost_delay

PGDLLIMPORT double autovacuum_vac_cost_delay
extern

Definition at line 128 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 129 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 122 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_vac_ins_thresh

PGDLLIMPORT int autovacuum_vac_ins_thresh
extern

Definition at line 121 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_vac_scale

PGDLLIMPORT double autovacuum_vac_scale
extern

Definition at line 120 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_vac_thresh

PGDLLIMPORT int autovacuum_vac_thresh
extern

Definition at line 119 of file autovacuum.c.

Referenced by relation_needs_vacanalyze().

◆ autovacuum_work_mem

PGDLLIMPORT int autovacuum_work_mem
extern

Definition at line 117 of file autovacuum.c.

Referenced by dead_items_max_items(), and ginInsertCleanup().

◆ AutovacuumLauncherPid

PGDLLIMPORT int AutovacuumLauncherPid
extern

Definition at line 303 of file autovacuum.c.

Referenced by FreeWorkerInfo(), and ProcKill().

◆ Log_autovacuum_min_duration

PGDLLIMPORT int Log_autovacuum_min_duration
extern

Definition at line 131 of file autovacuum.c.

Referenced by table_recheck_autovac().