From: Masahiko Sawada Date: Tue, 9 Dec 2025 19:23:45 +0000 (-0800) Subject: Add started_by column to pg_stat_progress_analyze view. X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=ab40db3852dfa093b64c9266dd372fee414e993f;p=postgresql.git Add started_by column to pg_stat_progress_analyze view. The new column, started_by, indicates the initiator of the analyze ('manual' or 'autovacuum'), helping users and monitoring tools to better understand ANALYZE behavior. Bump catalog version. Author: Shinya Kato Reviewed-by: Masahiko Sawada Reviewed-by: Sami Imseih Reviewed-by: Yu Wang Discussion: https://postgr.es/m/CAA5RZ0suoicwxFeK_eDkUrzF7s0BVTaE7M%2BehCpYcCk5wiECpw%40mail.gmail.com --- diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index cc2b590e7a2..817fd9f4ca7 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -5770,6 +5770,31 @@ FROM pg_stat_get_backend_idset() AS backendid; zero). + + + + started_by text + + + Shows what caused the current ANALYZE operation to be + started. Possible values are: + + + + manual: The analyze was started by an explicit + ANALYZE, or by VACUUM with + the option. + + + + + autovacuum: The analyze was started by an + autovacuum worker. + + + + + diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index e929c3547d5..0a0f95f6bb9 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -1247,7 +1247,10 @@ CREATE VIEW pg_stat_progress_analyze AS S.param6 AS child_tables_total, S.param7 AS child_tables_done, CAST(S.param8 AS oid) AS current_child_table_relid, - S.param9 / 1000000::double precision AS delay_time + S.param9 / 1000000::double precision AS delay_time, + CASE S.param10 WHEN 1 THEN 'manual' + WHEN 2 THEN 'autovacuum' + ELSE NULL END AS started_by FROM pg_stat_get_progress_info('ANALYZE') AS S LEFT JOIN pg_database D ON S.datid = D.oid; diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 25089fae3e0..b2429170679 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -239,6 +239,12 @@ analyze_rel(Oid relid, RangeVar *relation, */ pgstat_progress_start_command(PROGRESS_COMMAND_ANALYZE, RelationGetRelid(onerel)); + if (AmAutoVacuumWorkerProcess()) + pgstat_progress_update_param(PROGRESS_ANALYZE_STARTED_BY, + PROGRESS_ANALYZE_STARTED_BY_AUTOVACUUM); + else + pgstat_progress_update_param(PROGRESS_ANALYZE_STARTED_BY, + PROGRESS_ANALYZE_STARTED_BY_MANUAL); /* * Do the normal non-recursive ANALYZE. We can skip this for partitioned diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 3bd0f8499eb..d1b2e1cd2d1 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -57,6 +57,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202512092 +#define CATALOG_VERSION_NO 202512093 #endif diff --git a/src/include/commands/progress.h b/src/include/commands/progress.h index 45ed6e6e1cc..9dc63a5a5bd 100644 --- a/src/include/commands/progress.h +++ b/src/include/commands/progress.h @@ -60,6 +60,7 @@ #define PROGRESS_ANALYZE_CHILD_TABLES_DONE 6 #define PROGRESS_ANALYZE_CURRENT_CHILD_TABLE_RELID 7 #define PROGRESS_ANALYZE_DELAY_TIME 8 +#define PROGRESS_ANALYZE_STARTED_BY 9 /* Phases of analyze (as advertised via PROGRESS_ANALYZE_PHASE) */ #define PROGRESS_ANALYZE_PHASE_ACQUIRE_SAMPLE_ROWS 1 @@ -68,6 +69,10 @@ #define PROGRESS_ANALYZE_PHASE_COMPUTE_EXT_STATS 4 #define PROGRESS_ANALYZE_PHASE_FINALIZE_ANALYZE 5 +/* Reasons for analyze (as advertised via PROGRESS_ANALYZE_STARTED_BY) */ +#define PROGRESS_ANALYZE_STARTED_BY_MANUAL 1 +#define PROGRESS_ANALYZE_STARTED_BY_AUTOVACUUM 2 + /* Progress parameters for cluster */ #define PROGRESS_CLUSTER_COMMAND 0 #define PROGRESS_CLUSTER_PHASE 1 diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 1e5bb3cafcc..4286c266e17 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1969,7 +1969,12 @@ pg_stat_progress_analyze| SELECT s.pid, s.param6 AS child_tables_total, s.param7 AS child_tables_done, (s.param8)::oid AS current_child_table_relid, - ((s.param9)::double precision / (1000000)::double precision) AS delay_time + ((s.param9)::double precision / (1000000)::double precision) AS delay_time, + CASE s.param10 + WHEN 1 THEN 'manual'::text + WHEN 2 THEN 'autovacuum'::text + ELSE NULL::text + END AS started_by FROM (pg_stat_get_progress_info('ANALYZE'::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_progress_basebackup| SELECT pid,