Reintroduce dead tuple counter in pg_stat_progress_vacuum.
authorMasahiko Sawada <[email protected]>
Fri, 14 Jun 2024 01:08:15 +0000 (10:08 +0900)
committerMasahiko Sawada <[email protected]>
Fri, 14 Jun 2024 01:08:15 +0000 (10:08 +0900)
Commit 667e65aac3 changed both num_dead_tuples and max_dead_tuples
columns to dead_tuple_bytes and max_dead_tuple_bytes columns,
respectively. But as per discussion, the number of dead tuples
collected still provides meaningful insights for users.

This commit reintroduces the column for the count of dead tuples,
renamed as num_dead_item_ids. It avoids confusion with the number of
dead tuples removed by VACUUM, which includes dead heap-only tuples
but excludes any pre-existing LP_DEAD items left behind by
opportunistic pruning.

Bump catalog version.

Reviewed-by: Peter Geoghegan, Álvaro Herrera, Andrey Borodin
Discussion: https://postgr.es/m/CAD21AoBL5sJE9TRWPyv%2Bw7k5Ee5QAJqDJEDJBUdAaCzGWAdvZw%40mail.gmail.com

doc/src/sgml/monitoring.sgml
src/backend/access/heap/vacuumlazy.c
src/backend/catalog/system_views.sql
src/include/catalog/catversion.h
src/include/commands/progress.h
src/test/regress/expected/rules.out

index 053da8d6e40a0e65b104e762669efaf5477b629c..b2ad9b446f39942ce46d40141000ebf853f11bb6 100644 (file)
@@ -6268,6 +6268,15 @@ FROM pg_stat_get_backend_idset() AS backendid;
       </para></entry>
      </row>
 
+     <row>
+      <entry role="catalog_table_entry"><para role="column_definition">
+      <structfield>num_dead_item_ids</structfield> <type>bigint</type>
+      </para>
+      <para>
+       Number of dead item identifiers collected since the last index vacuum cycle.
+      </para></entry>
+     </row>
+
      <row>
       <entry role="catalog_table_entry"><para role="column_definition">
        <structfield>indexes_total</structfield> <type>bigint</type>
index 70426b0266ed911c71f1219cc655f086ab6acbb7..3f88cf1e8ef43ed90def292839141d61e097a32b 100644 (file)
@@ -2883,13 +2883,19 @@ dead_items_add(LVRelState *vacrel, BlockNumber blkno, OffsetNumber *offsets,
               int num_offsets)
 {
    TidStore   *dead_items = vacrel->dead_items;
+   const int   prog_index[2] = {
+       PROGRESS_VACUUM_NUM_DEAD_ITEM_IDS,
+       PROGRESS_VACUUM_DEAD_TUPLE_BYTES
+   };
+   int64       prog_val[2];
 
    TidStoreSetBlockOffsets(dead_items, blkno, offsets, num_offsets);
    vacrel->dead_items_info->num_items += num_offsets;
 
-   /* update the memory usage report */
-   pgstat_progress_update_param(PROGRESS_VACUUM_DEAD_TUPLE_BYTES,
-                                TidStoreMemoryUsage(dead_items));
+   /* update the progress information */
+   prog_val[0] = vacrel->dead_items_info->num_items;
+   prog_val[1] = TidStoreMemoryUsage(dead_items);
+   pgstat_progress_update_multi_param(2, prog_index, prog_val);
 }
 
 /*
index 53047cab5fce1c15dcca47dd9a3eff71229a003f..efb29adeb39cc5689980595f5328be3057ca2562 100644 (file)
@@ -1221,7 +1221,8 @@ CREATE VIEW pg_stat_progress_vacuum AS
         S.param2 AS heap_blks_total, S.param3 AS heap_blks_scanned,
         S.param4 AS heap_blks_vacuumed, S.param5 AS index_vacuum_count,
         S.param6 AS max_dead_tuple_bytes, S.param7 AS dead_tuple_bytes,
-        S.param8 AS indexes_total, S.param9 AS indexes_processed
+        S.param8 AS num_dead_item_ids, S.param9 AS indexes_total,
+        S.param10 AS indexes_processed
     FROM pg_stat_get_progress_info('VACUUM') AS S
         LEFT JOIN pg_database D ON S.datid = D.oid;
 
index f0809c0e58a598bda6585769dde1f987108124d5..542213db380f0493e735b2f9b02d3052101d229a 100644 (file)
@@ -57,6 +57,6 @@
  */
 
 /*                         yyyymmddN */
-#define CATALOG_VERSION_NO 202405161
+#define CATALOG_VERSION_NO 202406141
 
 #endif
index 82a8fe6bd1476ac05e72e85287318a43bd1b5f0b..5616d645230ce10423367b988e3cd7086c42114d 100644 (file)
@@ -25,8 +25,9 @@
 #define PROGRESS_VACUUM_NUM_INDEX_VACUUMS      4
 #define PROGRESS_VACUUM_MAX_DEAD_TUPLE_BYTES   5
 #define PROGRESS_VACUUM_DEAD_TUPLE_BYTES       6
-#define PROGRESS_VACUUM_INDEXES_TOTAL          7
-#define PROGRESS_VACUUM_INDEXES_PROCESSED      8
+#define PROGRESS_VACUUM_NUM_DEAD_ITEM_IDS      7
+#define PROGRESS_VACUUM_INDEXES_TOTAL          8
+#define PROGRESS_VACUUM_INDEXES_PROCESSED      9
 
 /* Phases of vacuum (as advertised via PROGRESS_VACUUM_PHASE) */
 #define PROGRESS_VACUUM_PHASE_SCAN_HEAP            1
index ef658ad7405531da081dc8af0e9141974401909c..13178e2b3df28ba1a27f08e7642eb287f54e8a68 100644 (file)
@@ -2052,8 +2052,9 @@ pg_stat_progress_vacuum| SELECT s.pid,
     s.param5 AS index_vacuum_count,
     s.param6 AS max_dead_tuple_bytes,
     s.param7 AS dead_tuple_bytes,
-    s.param8 AS indexes_total,
-    s.param9 AS indexes_processed
+    s.param8 AS num_dead_item_ids,
+    s.param9 AS indexes_total,
+    s.param10 AS indexes_processed
    FROM (pg_stat_get_progress_info('VACUUM'::text) s(pid, datid, relid, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17, param18, param19, param20)
      LEFT JOIN pg_database d ON ((s.datid = d.oid)));
 pg_stat_recovery_prefetch| SELECT stats_reset,