0001-Revive-num_dead_tuples-column-of-pg_stat_progress_va.patch

application/octet-stream

Filename: 0001-Revive-num_dead_tuples-column-of-pg_stat_progress_va.patch
Type: application/octet-stream
Part: 0
Message: Revive num_dead_tuples column of pg_stat_progress_vacuum

Patch

Format: format-patch
Series: patch 0001
Subject: Revive num_dead_tuples column of pg_stat_progress_vacuum.
File+
doc/src/sgml/monitoring.sgml 9 0
src/backend/access/heap/vacuumlazy.c 3 1
src/backend/catalog/system_views.sql 2 1
src/include/commands/progress.h 3 2
src/test/regress/expected/rules.out 3 2
From d8a97ccef96b4f4f5ff1398572de255f085612a7 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Tue, 4 Jun 2024 06:17:25 +0900
Subject: [PATCH] Revive num_dead_tuples column of pg_stat_progress_vacuum.

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 can provide meaningful insights for users.

This change revives num_dead_tuples column of pg_stat_progress_vacuum
view, but not include max_dead_tuples column as it is not predictable.

XXX: bump catalog version.

Reviewed-by:
Discussion: https://postgr.es/m/
---
 doc/src/sgml/monitoring.sgml         | 9 +++++++++
 src/backend/access/heap/vacuumlazy.c | 4 +++-
 src/backend/catalog/system_views.sql | 3 ++-
 src/include/commands/progress.h      | 5 +++--
 src/test/regress/expected/rules.out  | 5 +++--
 5 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml
index 053da8d6e4..062329553e 100644
--- a/doc/src/sgml/monitoring.sgml
+++ b/doc/src/sgml/monitoring.sgml
@@ -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_tuples</structfield> <type>bigint</type>
+      </para>
+      <para>
+       Number of dead tuples 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>
diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c
index 8145ea8fc3..bed59b72c6 100644
--- a/src/backend/access/heap/vacuumlazy.c
+++ b/src/backend/access/heap/vacuumlazy.c
@@ -2887,7 +2887,9 @@ dead_items_add(LVRelState *vacrel, BlockNumber blkno, OffsetNumber *offsets,
 	TidStoreSetBlockOffsets(dead_items, blkno, offsets, num_offsets);
 	vacrel->dead_items_info->num_items += num_offsets;
 
-	/* update the memory usage report */
+	/* update the progress information */
+	pgstat_progress_update_param(PROGRESS_VACUUM_NUM_DEAD_TUPLES,
+								 vacrel->dead_items_info->num_items);
 	pgstat_progress_update_param(PROGRESS_VACUUM_DEAD_TUPLE_BYTES,
 								 TidStoreMemoryUsage(dead_items));
 }
diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql
index 53047cab5f..9880878c7f 100644
--- a/src/backend/catalog/system_views.sql
+++ b/src/backend/catalog/system_views.sql
@@ -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_tuples, 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;
 
diff --git a/src/include/commands/progress.h b/src/include/commands/progress.h
index 82a8fe6bd1..9f10b2c73f 100644
--- a/src/include/commands/progress.h
+++ b/src/include/commands/progress.h
@@ -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_TUPLES			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
diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out
index ef658ad740..820723f6fc 100644
--- a/src/test/regress/expected/rules.out
+++ b/src/test/regress/expected/rules.out
@@ -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_tuples,
+    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,
-- 
2.39.3