mirror of
https://github.com/postgres/postgres.git
synced 2025-06-05 23:56:58 +03:00
Add is_analyze parameter to vacuum_delay_point().
This function is used in both vacuum and analyze code paths, and a follow-up commit will require distinguishing between the two. This commit forces callers to specify whether they are in a vacuum or analyze path, but it does not use that information for anything yet. Author: Nathan Bossart <nathandbossart@gmail.com> Co-authored-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com> Discussion: https://postgr.es/m/ZmaXmWDL829fzAVX%40ip-10-97-1-34.eu-west-3.compute.internal
This commit is contained in:
parent
d0d649e916
commit
e5b0b0ce15
@ -57,7 +57,7 @@ blbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
|
|||||||
*itupPtr,
|
*itupPtr,
|
||||||
*itupEnd;
|
*itupEnd;
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
|
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
|
||||||
RBM_NORMAL, info->strategy);
|
RBM_NORMAL, info->strategy);
|
||||||
@ -187,7 +187,7 @@ blvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats)
|
|||||||
Buffer buffer;
|
Buffer buffer;
|
||||||
Page page;
|
Page page;
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
|
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
|
||||||
RBM_NORMAL, info->strategy);
|
RBM_NORMAL, info->strategy);
|
||||||
|
@ -1237,7 +1237,7 @@ file_acquire_sample_rows(Relation onerel, int elevel,
|
|||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
/* Check for user-requested abort or sleep */
|
/* Check for user-requested abort or sleep */
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(true);
|
||||||
|
|
||||||
/* Fetch next row */
|
/* Fetch next row */
|
||||||
MemoryContextReset(tupcontext);
|
MemoryContextReset(tupcontext);
|
||||||
|
@ -892,7 +892,7 @@ ginInsertCleanup(GinState *ginstate, bool full_clean,
|
|||||||
*/
|
*/
|
||||||
processPendingPage(&accum, &datums, page, FirstOffsetNumber);
|
processPendingPage(&accum, &datums, page, FirstOffsetNumber);
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Is it time to flush memory to disk? Flush if we are at the end of
|
* Is it time to flush memory to disk? Flush if we are at the end of
|
||||||
@ -929,7 +929,7 @@ ginInsertCleanup(GinState *ginstate, bool full_clean,
|
|||||||
{
|
{
|
||||||
ginEntryInsert(ginstate, attnum, key, category,
|
ginEntryInsert(ginstate, attnum, key, category,
|
||||||
list, nlist, NULL);
|
list, nlist, NULL);
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1002,7 +1002,7 @@ ginInsertCleanup(GinState *ginstate, bool full_clean,
|
|||||||
/*
|
/*
|
||||||
* Read next page in pending list
|
* Read next page in pending list
|
||||||
*/
|
*/
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
buffer = ReadBuffer(index, blkno);
|
buffer = ReadBuffer(index, blkno);
|
||||||
LockBuffer(buffer, GIN_SHARE);
|
LockBuffer(buffer, GIN_SHARE);
|
||||||
page = BufferGetPage(buffer);
|
page = BufferGetPage(buffer);
|
||||||
|
@ -662,12 +662,12 @@ ginbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
|
|||||||
UnlockReleaseBuffer(buffer);
|
UnlockReleaseBuffer(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
for (i = 0; i < nRoot; i++)
|
for (i = 0; i < nRoot; i++)
|
||||||
{
|
{
|
||||||
ginVacuumPostingTree(&gvs, rootOfPostingTree[i]);
|
ginVacuumPostingTree(&gvs, rootOfPostingTree[i]);
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blkno == InvalidBlockNumber) /* rightmost page */
|
if (blkno == InvalidBlockNumber) /* rightmost page */
|
||||||
@ -748,7 +748,7 @@ ginvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats)
|
|||||||
Buffer buffer;
|
Buffer buffer;
|
||||||
Page page;
|
Page page;
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
|
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
|
||||||
RBM_NORMAL, info->strategy);
|
RBM_NORMAL, info->strategy);
|
||||||
|
@ -283,7 +283,7 @@ restart:
|
|||||||
recurse_to = InvalidBlockNumber;
|
recurse_to = InvalidBlockNumber;
|
||||||
|
|
||||||
/* call vacuum_delay_point while not holding any buffer lock */
|
/* call vacuum_delay_point while not holding any buffer lock */
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
buffer = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL,
|
buffer = ReadBufferExtended(rel, MAIN_FORKNUM, blkno, RBM_NORMAL,
|
||||||
info->strategy);
|
info->strategy);
|
||||||
|
@ -716,7 +716,7 @@ hashbucketcleanup(Relation rel, Bucket cur_bucket, Buffer bucket_buf,
|
|||||||
bool retain_pin = false;
|
bool retain_pin = false;
|
||||||
bool clear_dead_marking = false;
|
bool clear_dead_marking = false;
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
page = BufferGetPage(buf);
|
page = BufferGetPage(buf);
|
||||||
opaque = HashPageGetOpaque(page);
|
opaque = HashPageGetOpaque(page);
|
||||||
|
@ -1214,7 +1214,7 @@ lazy_scan_heap(LVRelState *vacrel)
|
|||||||
update_vacuum_error_info(vacrel, NULL, VACUUM_ERRCB_PHASE_SCAN_HEAP,
|
update_vacuum_error_info(vacrel, NULL, VACUUM_ERRCB_PHASE_SCAN_HEAP,
|
||||||
blkno, InvalidOffsetNumber);
|
blkno, InvalidOffsetNumber);
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Regularly check if wraparound failsafe should trigger.
|
* Regularly check if wraparound failsafe should trigger.
|
||||||
@ -2646,7 +2646,7 @@ lazy_vacuum_heap_rel(LVRelState *vacrel)
|
|||||||
OffsetNumber offsets[MaxOffsetNumber];
|
OffsetNumber offsets[MaxOffsetNumber];
|
||||||
int num_offsets;
|
int num_offsets;
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
blkno = iter_result->blkno;
|
blkno = iter_result->blkno;
|
||||||
vacrel->blkno = blkno;
|
vacrel->blkno = blkno;
|
||||||
|
@ -1137,7 +1137,7 @@ backtrack:
|
|||||||
backtrack_to = P_NONE;
|
backtrack_to = P_NONE;
|
||||||
|
|
||||||
/* call vacuum_delay_point while not holding any buffer lock */
|
/* call vacuum_delay_point while not holding any buffer lock */
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We can't use _bt_getbuf() here because it always applies
|
* We can't use _bt_getbuf() here because it always applies
|
||||||
|
@ -625,7 +625,7 @@ spgvacuumpage(spgBulkDeleteState *bds, BlockNumber blkno)
|
|||||||
Page page;
|
Page page;
|
||||||
|
|
||||||
/* call vacuum_delay_point while not holding any buffer lock */
|
/* call vacuum_delay_point while not holding any buffer lock */
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
|
buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
|
||||||
RBM_NORMAL, bds->info->strategy);
|
RBM_NORMAL, bds->info->strategy);
|
||||||
@ -704,7 +704,7 @@ spgprocesspending(spgBulkDeleteState *bds)
|
|||||||
continue; /* ignore already-done items */
|
continue; /* ignore already-done items */
|
||||||
|
|
||||||
/* call vacuum_delay_point while not holding any buffer lock */
|
/* call vacuum_delay_point while not holding any buffer lock */
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(false);
|
||||||
|
|
||||||
/* examine the referenced page */
|
/* examine the referenced page */
|
||||||
blkno = ItemPointerGetBlockNumber(&pitem->tid);
|
blkno = ItemPointerGetBlockNumber(&pitem->tid);
|
||||||
|
@ -915,7 +915,7 @@ compute_index_stats(Relation onerel, double totalrows,
|
|||||||
{
|
{
|
||||||
HeapTuple heapTuple = rows[rowno];
|
HeapTuple heapTuple = rows[rowno];
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(true);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reset the per-tuple context each time, to reclaim any cruft
|
* Reset the per-tuple context each time, to reclaim any cruft
|
||||||
@ -1238,7 +1238,7 @@ acquire_sample_rows(Relation onerel, int elevel,
|
|||||||
/* Outer loop over blocks to sample */
|
/* Outer loop over blocks to sample */
|
||||||
while (table_scan_analyze_next_block(scan, stream))
|
while (table_scan_analyze_next_block(scan, stream))
|
||||||
{
|
{
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(true);
|
||||||
|
|
||||||
while (table_scan_analyze_next_tuple(scan, OldestXmin, &liverows, &deadrows, slot))
|
while (table_scan_analyze_next_tuple(scan, OldestXmin, &liverows, &deadrows, slot))
|
||||||
{
|
{
|
||||||
@ -1970,7 +1970,7 @@ compute_trivial_stats(VacAttrStatsP stats,
|
|||||||
Datum value;
|
Datum value;
|
||||||
bool isnull;
|
bool isnull;
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(true);
|
||||||
|
|
||||||
value = fetchfunc(stats, i, &isnull);
|
value = fetchfunc(stats, i, &isnull);
|
||||||
|
|
||||||
@ -2086,7 +2086,7 @@ compute_distinct_stats(VacAttrStatsP stats,
|
|||||||
int firstcount1,
|
int firstcount1,
|
||||||
j;
|
j;
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(true);
|
||||||
|
|
||||||
value = fetchfunc(stats, i, &isnull);
|
value = fetchfunc(stats, i, &isnull);
|
||||||
|
|
||||||
@ -2433,7 +2433,7 @@ compute_scalar_stats(VacAttrStatsP stats,
|
|||||||
Datum value;
|
Datum value;
|
||||||
bool isnull;
|
bool isnull;
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(true);
|
||||||
|
|
||||||
value = fetchfunc(stats, i, &isnull);
|
value = fetchfunc(stats, i, &isnull);
|
||||||
|
|
||||||
|
@ -2373,7 +2373,7 @@ vac_close_indexes(int nindexes, Relation *Irel, LOCKMODE lockmode)
|
|||||||
* typically once per page processed.
|
* typically once per page processed.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
vacuum_delay_point(void)
|
vacuum_delay_point(bool is_analyze)
|
||||||
{
|
{
|
||||||
double msec = 0;
|
double msec = 0;
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ compute_tsvector_stats(VacAttrStats *stats,
|
|||||||
char *lexemesptr;
|
char *lexemesptr;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(true);
|
||||||
|
|
||||||
value = fetchfunc(stats, vector_no, &isnull);
|
value = fetchfunc(stats, vector_no, &isnull);
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ compute_array_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
|
|||||||
int distinct_count;
|
int distinct_count;
|
||||||
bool count_item_found;
|
bool count_item_found;
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(true);
|
||||||
|
|
||||||
value = fetchfunc(stats, array_no, &isnull);
|
value = fetchfunc(stats, array_no, &isnull);
|
||||||
if (isnull)
|
if (isnull)
|
||||||
|
@ -167,7 +167,7 @@ compute_range_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
|
|||||||
upper;
|
upper;
|
||||||
float8 length;
|
float8 length;
|
||||||
|
|
||||||
vacuum_delay_point();
|
vacuum_delay_point(true);
|
||||||
|
|
||||||
value = fetchfunc(stats, range_no, &isnull);
|
value = fetchfunc(stats, range_no, &isnull);
|
||||||
if (isnull)
|
if (isnull)
|
||||||
|
@ -356,7 +356,7 @@ extern bool vacuum_get_cutoffs(Relation rel, const VacuumParams *params,
|
|||||||
struct VacuumCutoffs *cutoffs);
|
struct VacuumCutoffs *cutoffs);
|
||||||
extern bool vacuum_xid_failsafe_check(const struct VacuumCutoffs *cutoffs);
|
extern bool vacuum_xid_failsafe_check(const struct VacuumCutoffs *cutoffs);
|
||||||
extern void vac_update_datfrozenxid(void);
|
extern void vac_update_datfrozenxid(void);
|
||||||
extern void vacuum_delay_point(void);
|
extern void vacuum_delay_point(bool is_analyze);
|
||||||
extern bool vacuum_is_permitted_for_relation(Oid relid, Form_pg_class reltuple,
|
extern bool vacuum_is_permitted_for_relation(Oid relid, Form_pg_class reltuple,
|
||||||
bits32 options);
|
bits32 options);
|
||||||
extern Relation vacuum_open_relation(Oid relid, RangeVar *relation,
|
extern Relation vacuum_open_relation(Oid relid, RangeVar *relation,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user