Add is_analyze parameter to vacuum_delay_point().
authorNathan Bossart <[email protected]>
Tue, 11 Feb 2025 22:38:14 +0000 (16:38 -0600)
committerNathan Bossart <[email protected]>
Tue, 11 Feb 2025 22:38:14 +0000 (16:38 -0600)
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 <[email protected]>
Co-authored-by: Bertrand Drouvot <[email protected]>
Discussion: https://postgr.es/m/ZmaXmWDL829fzAVX%40ip-10-97-1-34.eu-west-3.compute.internal

15 files changed:
contrib/bloom/blvacuum.c
contrib/file_fdw/file_fdw.c
src/backend/access/gin/ginfast.c
src/backend/access/gin/ginvacuum.c
src/backend/access/gist/gistvacuum.c
src/backend/access/hash/hash.c
src/backend/access/heap/vacuumlazy.c
src/backend/access/nbtree/nbtree.c
src/backend/access/spgist/spgvacuum.c
src/backend/commands/analyze.c
src/backend/commands/vacuum.c
src/backend/tsearch/ts_typanalyze.c
src/backend/utils/adt/array_typanalyze.c
src/backend/utils/adt/rangetypes_typanalyze.c
src/include/commands/vacuum.h

index 7e1db0b52fceb69c535bd9fa98a6ad1d29a949f5..86b15a75f6fb9d6b29fb2af417f932af4c16e5e2 100644 (file)
@@ -57,7 +57,7 @@ blbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
                   *itupPtr,
                   *itupEnd;
 
-       vacuum_delay_point();
+       vacuum_delay_point(false);
 
        buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
                                    RBM_NORMAL, info->strategy);
@@ -187,7 +187,7 @@ blvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats)
        Buffer      buffer;
        Page        page;
 
-       vacuum_delay_point();
+       vacuum_delay_point(false);
 
        buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
                                    RBM_NORMAL, info->strategy);
index 678e754b2b9f64623f8d70a82c2106c6685f16ba..0655bf532a05bf7e12440600925489f7171ab50b 100644 (file)
@@ -1237,7 +1237,7 @@ file_acquire_sample_rows(Relation onerel, int elevel,
    for (;;)
    {
        /* Check for user-requested abort or sleep */
-       vacuum_delay_point();
+       vacuum_delay_point(true);
 
        /* Fetch next row */
        MemoryContextReset(tupcontext);
index 4ab815fefe00f09c858e640df2c1099bca8a1ab0..cc5d046c4b07d33eec597696e232536a580bd8f7 100644 (file)
@@ -892,7 +892,7 @@ ginInsertCleanup(GinState *ginstate, bool full_clean,
         */
        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
@@ -929,7 +929,7 @@ ginInsertCleanup(GinState *ginstate, bool full_clean,
            {
                ginEntryInsert(ginstate, attnum, key, category,
                               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
         */
-       vacuum_delay_point();
+       vacuum_delay_point(false);
        buffer = ReadBuffer(index, blkno);
        LockBuffer(buffer, GIN_SHARE);
        page = BufferGetPage(buffer);
index d98c54b7cf746968a025d6f79cd9eb5dc6c7ee57..533c37b3c5f81281fa904e292c693e466958750b 100644 (file)
@@ -662,12 +662,12 @@ ginbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
            UnlockReleaseBuffer(buffer);
        }
 
-       vacuum_delay_point();
+       vacuum_delay_point(false);
 
        for (i = 0; i < nRoot; i++)
        {
            ginVacuumPostingTree(&gvs, rootOfPostingTree[i]);
-           vacuum_delay_point();
+           vacuum_delay_point(false);
        }
 
        if (blkno == InvalidBlockNumber)    /* rightmost page */
@@ -748,7 +748,7 @@ ginvacuumcleanup(IndexVacuumInfo *info, IndexBulkDeleteResult *stats)
        Buffer      buffer;
        Page        page;
 
-       vacuum_delay_point();
+       vacuum_delay_point(false);
 
        buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
                                    RBM_NORMAL, info->strategy);
index fe0bfb781ca65f31559f19cf4fd0efa0ee590f7d..dd0d9d5006c31b08fc84f4394d7527825fcf2527 100644 (file)
@@ -283,7 +283,7 @@ restart:
    recurse_to = InvalidBlockNumber;
 
    /* 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,
                                info->strategy);
index 63b568e7f24671ff80353aabaf9157577ad3dad6..4167b33e68333a99cdbd018802c09a9085e6a839 100644 (file)
@@ -716,7 +716,7 @@ hashbucketcleanup(Relation rel, Bucket cur_bucket, Buffer bucket_buf,
        bool        retain_pin = false;
        bool        clear_dead_marking = false;
 
-       vacuum_delay_point();
+       vacuum_delay_point(false);
 
        page = BufferGetPage(buf);
        opaque = HashPageGetOpaque(page);
index 8c387ae557e4a6cb8aee87f8d57be1fe63bccbba..3df5b92afb8f6bd1a205e3bc968c0ae53394d9c0 100644 (file)
@@ -1214,7 +1214,7 @@ lazy_scan_heap(LVRelState *vacrel)
        update_vacuum_error_info(vacrel, NULL, VACUUM_ERRCB_PHASE_SCAN_HEAP,
                                 blkno, InvalidOffsetNumber);
 
-       vacuum_delay_point();
+       vacuum_delay_point(false);
 
        /*
         * Regularly check if wraparound failsafe should trigger.
@@ -2646,7 +2646,7 @@ lazy_vacuum_heap_rel(LVRelState *vacrel)
        OffsetNumber offsets[MaxOffsetNumber];
        int         num_offsets;
 
-       vacuum_delay_point();
+       vacuum_delay_point(false);
 
        blkno = iter_result->blkno;
        vacrel->blkno = blkno;
index 971405e89af8ffa76c672777b1afb64cfb9bfee4..dc244ae24c7aa1d7859a9c76ea67c47aa33b6745 100644 (file)
@@ -1137,7 +1137,7 @@ backtrack:
    backtrack_to = P_NONE;
 
    /* 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
index 894aefa19e14985bc1c397cc6cf997d6a342de6b..1c52f6528ada77b4ad6c71157b97f0b605cac88a 100644 (file)
@@ -625,7 +625,7 @@ spgvacuumpage(spgBulkDeleteState *bds, BlockNumber blkno)
    Page        page;
 
    /* call vacuum_delay_point while not holding any buffer lock */
-   vacuum_delay_point();
+   vacuum_delay_point(false);
 
    buffer = ReadBufferExtended(index, MAIN_FORKNUM, blkno,
                                RBM_NORMAL, bds->info->strategy);
@@ -704,7 +704,7 @@ spgprocesspending(spgBulkDeleteState *bds)
            continue;           /* ignore already-done items */
 
        /* call vacuum_delay_point while not holding any buffer lock */
-       vacuum_delay_point();
+       vacuum_delay_point(false);
 
        /* examine the referenced page */
        blkno = ItemPointerGetBlockNumber(&pitem->tid);
index e5ab207d2ec78713fe3f46f1f7232b9019cdb5f5..e4302f4cdb286881722af1311707774461129b95 100644 (file)
@@ -915,7 +915,7 @@ compute_index_stats(Relation onerel, double totalrows,
        {
            HeapTuple   heapTuple = rows[rowno];
 
-           vacuum_delay_point();
+           vacuum_delay_point(true);
 
            /*
             * 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 */
    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))
        {
@@ -1970,7 +1970,7 @@ compute_trivial_stats(VacAttrStatsP stats,
        Datum       value;
        bool        isnull;
 
-       vacuum_delay_point();
+       vacuum_delay_point(true);
 
        value = fetchfunc(stats, i, &isnull);
 
@@ -2086,7 +2086,7 @@ compute_distinct_stats(VacAttrStatsP stats,
        int         firstcount1,
                    j;
 
-       vacuum_delay_point();
+       vacuum_delay_point(true);
 
        value = fetchfunc(stats, i, &isnull);
 
@@ -2433,7 +2433,7 @@ compute_scalar_stats(VacAttrStatsP stats,
        Datum       value;
        bool        isnull;
 
-       vacuum_delay_point();
+       vacuum_delay_point(true);
 
        value = fetchfunc(stats, i, &isnull);
 
index a13a2d7f222858dfc34dc1f356b1fe546f09d157..cddddb0f9ea1f7a2056ceb8c4e79658c56a30e0a 100644 (file)
@@ -2373,7 +2373,7 @@ vac_close_indexes(int nindexes, Relation *Irel, LOCKMODE lockmode)
  * typically once per page processed.
  */
 void
-vacuum_delay_point(void)
+vacuum_delay_point(bool is_analyze)
 {
    double      msec = 0;
 
index 1494da1c9d3851bcfcf846c26a47fd43f45dcbc3..c5a71331ce8a00a50c6dd0d8d9f5e540740b9c98 100644 (file)
@@ -204,7 +204,7 @@ compute_tsvector_stats(VacAttrStats *stats,
        char       *lexemesptr;
        int         j;
 
-       vacuum_delay_point();
+       vacuum_delay_point(true);
 
        value = fetchfunc(stats, vector_no, &isnull);
 
index 44a6eb5dad0e8cc5627a5b237d59746938aecba6..6f61629b9778de2f3f89f99816b88761e99b1c1e 100644 (file)
@@ -314,7 +314,7 @@ compute_array_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
        int         distinct_count;
        bool        count_item_found;
 
-       vacuum_delay_point();
+       vacuum_delay_point(true);
 
        value = fetchfunc(stats, array_no, &isnull);
        if (isnull)
index 9dc73af1992f34517e067ed1716083945e2f0330..a18196d8a34a51aedfa7c58ddd30b7cc0c0f1531 100644 (file)
@@ -167,7 +167,7 @@ compute_range_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
                    upper;
        float8      length;
 
-       vacuum_delay_point();
+       vacuum_delay_point(true);
 
        value = fetchfunc(stats, range_no, &isnull);
        if (isnull)
index 7dad14319a10524c1ae03f7cab618d2f0e212f7b..7fbb738eb8f877e0fecfe9fc1c0a584a084a6c57 100644 (file)
@@ -356,7 +356,7 @@ extern bool vacuum_get_cutoffs(Relation rel, const VacuumParams *params,
                               struct VacuumCutoffs *cutoffs);
 extern bool vacuum_xid_failsafe_check(const struct VacuumCutoffs *cutoffs);
 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,
                                             bits32 options);
 extern Relation vacuum_open_relation(Oid relid, RangeVar *relation,