41 #define VACUUM_OPTION_NO_PARALLEL 0
47 #define VACUUM_OPTION_PARALLEL_BULKDEL (1 << 0)
54 #define VACUUM_OPTION_PARALLEL_COND_CLEANUP (1 << 1)
62 #define VACUUM_OPTION_PARALLEL_CLEANUP (1 << 2)
65 #define VACUUM_OPTION_MAX_VALID_VALUE ((1 << 3) - 1)
179 #define VACOPT_VACUUM 0x01
180 #define VACOPT_ANALYZE 0x02
181 #define VACOPT_VERBOSE 0x04
182 #define VACOPT_FREEZE 0x08
183 #define VACOPT_FULL 0x10
184 #define VACOPT_SKIP_LOCKED 0x20
185 #define VACOPT_PROCESS_MAIN 0x40
186 #define VACOPT_PROCESS_TOAST 0x80
187 #define VACOPT_DISABLE_PAGE_SKIPPING 0x100
188 #define VACOPT_SKIP_DATABASE_STATS 0x200
189 #define VACOPT_ONLY_DATABASE_STATS 0x400
291 #define MAXDEADITEMS(avail_mem) \
292 (((avail_mem) - offsetof(VacDeadItems, items)) / sizeof(ItemPointerData))
308 #define MAX_STATISTICS_TARGET 10000
330 double scanned_tuples);
338 bool *frozenxid_updated,
339 bool *minmulti_updated,
364 int nindexes,
int nrequested_workers,
365 int max_items,
int elevel,
370 long num_table_tuples,
371 int num_index_scans);
373 long num_table_tuples,
375 bool estimated_count);
TransactionId MultiXactId
#define FLEXIBLE_ARRAY_MEMBER
FormData_pg_class * Form_pg_class
#define STATISTIC_NUM_SLOTS
FormData_pg_type * Form_pg_type
int16 stakind[STATISTIC_NUM_SLOTS]
MemoryContext anl_context
Oid statypid[STATISTIC_NUM_SLOTS]
Oid staop[STATISTIC_NUM_SLOTS]
Oid stacoll[STATISTIC_NUM_SLOTS]
char statypalign[STATISTIC_NUM_SLOTS]
float4 * stanumbers[STATISTIC_NUM_SLOTS]
bool statypbyval[STATISTIC_NUM_SLOTS]
int16 statyplen[STATISTIC_NUM_SLOTS]
int numvalues[STATISTIC_NUM_SLOTS]
Datum * stavalues[STATISTIC_NUM_SLOTS]
int numnumbers[STATISTIC_NUM_SLOTS]
AnalyzeAttrComputeStatsFunc compute_stats
ItemPointerData items[FLEXIBLE_ARRAY_MEMBER]
TransactionId FreezeLimit
TransactionId relfrozenxid
MultiXactId MultiXactCutoff
int multixact_freeze_min_age
int multixact_freeze_table_age
VacOptValue index_cleanup
IndexBulkDeleteResult * vac_bulkdel_one_index(IndexVacuumInfo *ivinfo, IndexBulkDeleteResult *istat, VacDeadItems *dead_items)
void ExecVacuum(ParseState *pstate, VacuumStmt *vacstmt, bool isTopLevel)
void VacuumUpdateCosts(void)
PGDLLIMPORT int VacuumCostBalanceLocal
Size vac_max_items_to_alloc_size(int max_items)
PGDLLIMPORT int vacuum_freeze_table_age
struct VacDeadItems VacDeadItems
PGDLLIMPORT pg_atomic_uint32 * VacuumSharedCostBalance
PGDLLIMPORT int vacuum_cost_limit
bool std_typanalyze(VacAttrStats *stats)
void vac_open_indexes(Relation relation, LOCKMODE lockmode, int *nindexes, Relation **Irel)
void vacuum(List *relations, VacuumParams *params, BufferAccessStrategy bstrategy, MemoryContext vac_context, bool isTopLevel)
PGDLLIMPORT pg_atomic_uint32 * VacuumActiveNWorkers
void vac_update_relstats(Relation relation, BlockNumber num_pages, double num_tuples, BlockNumber num_all_visible_pages, bool hasindex, TransactionId frozenxid, MultiXactId minmulti, bool *frozenxid_updated, bool *minmulti_updated, bool in_outer_xact)
PGDLLIMPORT double vacuum_cost_delay
double anl_get_next_S(double t, int n, double *stateptr)
PGDLLIMPORT int vacuum_failsafe_age
VacDeadItems * parallel_vacuum_get_dead_items(ParallelVacuumState *pvs)
struct VacAttrStats VacAttrStats
PGDLLIMPORT bool VacuumFailsafeActive
PGDLLIMPORT int vacuum_freeze_min_age
void parallel_vacuum_bulkdel_all_indexes(ParallelVacuumState *pvs, long num_table_tuples, int num_index_scans)
Relation vacuum_open_relation(Oid relid, RangeVar *relation, bits32 options, bool verbose, LOCKMODE lmode)
void vac_close_indexes(int nindexes, Relation *Irel, LOCKMODE lockmode)
void vacuum_delay_point(void)
void parallel_vacuum_cleanup_all_indexes(ParallelVacuumState *pvs, long num_table_tuples, int num_index_scans, bool estimated_count)
Datum(* AnalyzeAttrFetchFunc)(VacAttrStatsP stats, int rownum, bool *isNull)
bool vacuum_is_relation_owner(Oid relid, Form_pg_class reltuple, bits32 options)
void vac_update_datfrozenxid(void)
bool vacuum_get_cutoffs(Relation rel, const VacuumParams *params, struct VacuumCutoffs *cutoffs)
bool vacuum_xid_failsafe_check(const struct VacuumCutoffs *cutoffs)
@ VACOPTVALUE_UNSPECIFIED
PGDLLIMPORT int default_statistics_target
void parallel_vacuum_main(dsm_segment *seg, shm_toc *toc)
struct VacAttrStats * VacAttrStatsP
PGDLLIMPORT int vacuum_multixact_freeze_table_age
PGDLLIMPORT int vacuum_multixact_freeze_min_age
double vac_estimate_reltuples(Relation relation, BlockNumber total_pages, BlockNumber scanned_pages, double scanned_tuples)
double anl_init_selection_state(int n)
void(* AnalyzeAttrComputeStatsFunc)(VacAttrStatsP stats, AnalyzeAttrFetchFunc fetchfunc, int samplerows, double totalrows)
void analyze_rel(Oid relid, RangeVar *relation, VacuumParams *params, List *va_cols, bool in_outer_xact, BufferAccessStrategy bstrategy)
void AutoVacuumUpdateCostLimit(void)
IndexBulkDeleteResult * vac_cleanup_one_index(IndexVacuumInfo *ivinfo, IndexBulkDeleteResult *istat)
struct VacuumParams VacuumParams
void parallel_vacuum_end(ParallelVacuumState *pvs, IndexBulkDeleteResult **istats)
PGDLLIMPORT int vacuum_multixact_failsafe_age
ParallelVacuumState * parallel_vacuum_init(Relation rel, Relation *indrels, int nindexes, int nrequested_workers, int max_items, int elevel, BufferAccessStrategy bstrategy)
double anl_random_fract(void)