0001-autovacuum-score-logging-and-sort-enable-disable.txt

text/plain

Filename: 0001-autovacuum-score-logging-and-sort-enable-disable.txt
Type: text/plain
Part: 0
Message: Re: another autovacuum scheduling thread
From c24eeeb074acfb790fe44b60b2177482b9afe3c3 Mon Sep 17 00:00:00 2001
From: Ubuntu <ubuntu@ip-172-31-46-230.ec2.internal>
Date: Tue, 4 Nov 2025 15:55:40 +0000
Subject: [PATCH 1/1] autovacuum score logging and sort enable/disable

---
 src/backend/postmaster/autovacuum.c       |  7 ++++++-
 src/backend/utils/misc/guc_parameters.dat | 10 ++++++++++
 src/backend/utils/misc/guc_tables.c       |  6 ++++++
 src/include/postmaster/autovacuum.h       |  8 ++++++++
 4 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index e48bb06253b..ca9c5c615dc 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -333,6 +333,8 @@ static WorkerInfo MyWorkerInfo = NULL;
 /* PID of launcher, valid only in worker while shutting down */
 int			AutovacuumLauncherPid = 0;
 
+int			debug_autovacuum_sort = DEBUG_AUTOVACUUM_SORT_ON;
+
 static Oid	do_start_worker(void);
 static void ProcessAutoVacLauncherInterrupts(void);
 pg_noreturn static void AutoVacLauncherShutdown(void);
@@ -2083,6 +2085,7 @@ do_autovacuum(void)
 			table->oid = relid;
 			table->score = score;
 
+			elog(LOG, "adding table:%s,%lf,av=%d,aa=%d", get_rel_name(table->oid), score, dovacuum, doanalyze);
 			tables_to_process = lappend(tables_to_process, table);
 		}
 
@@ -2184,6 +2187,7 @@ do_autovacuum(void)
 			table->oid = relid;
 			table->score = score;
 
+			elog(LOG, "adding table:%s,%lf,av=1,aa=0", get_rel_name(table->oid), score);
 			tables_to_process = lappend(tables_to_process, table);
 		}
 
@@ -2309,7 +2313,8 @@ do_autovacuum(void)
 		MemoryContextSwitchTo(AutovacMemCxt);
 	}
 
-	list_sort(tables_to_process, TableToProcessComparator);
+	if (debug_autovacuum_sort == DEBUG_AUTOVACUUM_SORT_ON)
+		list_sort(tables_to_process, TableToProcessComparator);
 
 	/*
 	 * Optionally, create a buffer access strategy object for VACUUM to use.
diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat
index d6fc8333850..2bf9ce4ed27 100644
--- a/src/backend/utils/misc/guc_parameters.dat
+++ b/src/backend/utils/misc/guc_parameters.dat
@@ -3445,6 +3445,16 @@
   options => 'debug_parallel_query_options',
 },
 
+{ name => 'debug_autovacuum_sort', type => 'enum', context => 'PGC_USERSET', group => 'DEVELOPER_OPTIONS',
+  short_desc => 'Enables/Disables the autovacuum sort of eligible tables.',
+  long_desc => 'This can be useful for testing the effect of sorting eligible tables in autovacuum.',
+  flags => 'GUC_NOT_IN_SAMPLE | GUC_EXPLAIN',
+  variable => 'debug_autovacuum_sort',
+  boot_val => 'DEBUG_AUTOVACUUM_SORT_ON',
+  options => 'debug_autovacuum_sort_options',
+},
+
+
 { name => 'password_encryption', type => 'enum', context => 'PGC_USERSET', group => 'CONN_AUTH_AUTH',
   short_desc => 'Chooses the algorithm for encrypting passwords.',
   variable => 'Password_encryption',
diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c
index 00c8376cf4d..aaa93d35187 100644
--- a/src/backend/utils/misc/guc_tables.c
+++ b/src/backend/utils/misc/guc_tables.c
@@ -404,6 +404,12 @@ static const struct config_enum_entry debug_parallel_query_options[] = {
 	{NULL, 0, false}
 };
 
+static const struct config_enum_entry debug_autovacuum_sort_options[] = {
+	{"off", DEBUG_AUTOVACUUM_SORT_OFF, false},
+	{"on", DEBUG_AUTOVACUUM_SORT_ON, false},
+	{NULL, 0, false}
+};
+
 static const struct config_enum_entry plan_cache_mode_options[] = {
 	{"auto", PLAN_CACHE_MODE_AUTO, false},
 	{"force_generic_plan", PLAN_CACHE_MODE_FORCE_GENERIC_PLAN, false},
diff --git a/src/include/postmaster/autovacuum.h b/src/include/postmaster/autovacuum.h
index 023ac6d5fa8..32688784a06 100644
--- a/src/include/postmaster/autovacuum.h
+++ b/src/include/postmaster/autovacuum.h
@@ -25,6 +25,14 @@ typedef enum
 	AVW_BRINSummarizeRange,
 } AutoVacuumWorkItemType;
 
+/* possible values for debug_autovacuum_sort */
+typedef enum
+{
+	DEBUG_AUTOVACUUM_SORT_OFF,
+	DEBUG_AUTOVACUUM_SORT_ON,
+}			DebugAutovacuumSortMode;
+
+extern PGDLLIMPORT int debug_autovacuum_sort;
 
 /* GUC variables */
 extern PGDLLIMPORT bool autovacuum_start_daemon;
-- 
2.43.0