From de67cad872046ae5bae6e3a0a6033594b9d1ee86 Mon Sep 17 00:00:00 2001 From: Ilya Gladyshev Date: Sun, 21 Jul 2024 01:40:15 +0100 Subject: [PATCH v2 2/2] partition_relid column for create index progress --- doc/src/sgml/monitoring.sgml | 9 +++++++++ src/backend/catalog/index.c | 8 +++++--- src/backend/catalog/system_views.sql | 3 ++- src/backend/commands/indexcmds.c | 18 +++++++++++++----- src/include/commands/progress.h | 1 + src/test/regress/expected/rules.out | 3 ++- 6 files changed, 32 insertions(+), 10 deletions(-) diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 00bb423288..595f19a8f8 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -6006,6 +6006,15 @@ FROM pg_stat_get_backend_idset() AS backendid; 0 when the index is not partitioned. + + + partition_relid bigint + + + OID of the partition on which the index is currently being created. + 0 when the index is not partitioned. + + diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 90488f9140..6789e61f98 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -3599,17 +3599,19 @@ reindex_index(const ReindexStmt *stmt, Oid indexId, { const int progress_cols[] = { PROGRESS_CREATEIDX_COMMAND, - PROGRESS_CREATEIDX_INDEX_OID + PROGRESS_CREATEIDX_INDEX_OID, + PROGRESS_CREATEIDX_PARTITION_RELID }; const int64 progress_vals[] = { PROGRESS_CREATEIDX_COMMAND_REINDEX, - indexId + indexId, + partition ? heapId : 0 }; if (!partition) pgstat_progress_start_command(PROGRESS_COMMAND_CREATE_INDEX, heapId); - pgstat_progress_update_multi_param(2, progress_cols, progress_vals); + pgstat_progress_update_multi_param(3, progress_cols, progress_vals); } /* diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 19cabc9a47..00b7f3bda8 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -1280,7 +1280,8 @@ CREATE VIEW pg_stat_progress_create_index AS S.param12 AS tuples_total, S.param13 AS tuples_done, S.param14 AS partitions_total, - S.param15 AS partitions_done + S.param15 AS partitions_done, + S.param18 AS partition_relid FROM pg_stat_get_progress_info('CREATE INDEX') AS S LEFT JOIN pg_database D ON S.datid = D.oid; diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index d4c1811f50..284f7a919a 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -617,6 +617,10 @@ DefineIndex(Oid tableId, PROGRESS_CREATEIDX_COMMAND_CREATE_CONCURRENTLY : PROGRESS_CREATEIDX_COMMAND_CREATE); } + else + { + pgstat_progress_update_param(PROGRESS_CREATEIDX_PARTITION_RELID, tableId); + } /* * No index OID to report yet @@ -3486,9 +3490,10 @@ ReindexRelationConcurrently(const ReindexStmt *stmt, Oid relationOid, const Rein PROGRESS_CREATEIDX_COMMAND, PROGRESS_CREATEIDX_PHASE, PROGRESS_CREATEIDX_INDEX_OID, - PROGRESS_CREATEIDX_ACCESS_METHOD_OID + PROGRESS_CREATEIDX_ACCESS_METHOD_OID, + PROGRESS_CREATEIDX_PARTITION_RELID }; - int64 progress_vals[4]; + int64 progress_vals[5]; /* * Create a memory context that will survive forced transaction commits we @@ -3832,7 +3837,8 @@ ReindexRelationConcurrently(const ReindexStmt *stmt, Oid relationOid, const Rein progress_vals[1] = 0; /* initializing */ progress_vals[2] = idx->indexId; progress_vals[3] = idx->amId; - pgstat_progress_update_multi_param(4, progress_index, progress_vals); + progress_vals[4] = partition ? idx->tableId : 0; + pgstat_progress_update_multi_param(5, progress_index, progress_vals); /* Choose a temporary relation name for the new index */ concurrentName = ChooseRelationName(get_rel_name(idx->indexId), @@ -4007,7 +4013,8 @@ ReindexRelationConcurrently(const ReindexStmt *stmt, Oid relationOid, const Rein progress_vals[1] = PROGRESS_CREATEIDX_PHASE_BUILD; progress_vals[2] = newidx->indexId; progress_vals[3] = newidx->amId; - pgstat_progress_update_multi_param(4, progress_index, progress_vals); + progress_vals[4] = partition ? newidx->tableId : 0; + pgstat_progress_update_multi_param(5, progress_index, progress_vals); /* Perform concurrent build of new index */ index_concurrently_build(newidx->tableId, newidx->indexId); @@ -4072,7 +4079,8 @@ ReindexRelationConcurrently(const ReindexStmt *stmt, Oid relationOid, const Rein progress_vals[1] = PROGRESS_CREATEIDX_PHASE_VALIDATE_IDXSCAN; progress_vals[2] = newidx->indexId; progress_vals[3] = newidx->amId; - pgstat_progress_update_multi_param(4, progress_index, progress_vals); + progress_vals[4] = partition ? newidx->tableId : 0; + pgstat_progress_update_multi_param(5, progress_index, progress_vals); validate_index(newidx->tableId, newidx->indexId, snapshot); diff --git a/src/include/commands/progress.h b/src/include/commands/progress.h index 5616d64523..6cd8b41a4c 100644 --- a/src/include/commands/progress.h +++ b/src/include/commands/progress.h @@ -89,6 +89,7 @@ #define PROGRESS_CREATEIDX_PARTITIONS_TOTAL 13 #define PROGRESS_CREATEIDX_PARTITIONS_DONE 14 /* 15 and 16 reserved for "block number" metrics */ +#define PROGRESS_CREATEIDX_PARTITION_RELID 17 /* Phases of CREATE INDEX (as advertised via PROGRESS_CREATEIDX_PHASE) */ #define PROGRESS_CREATEIDX_PHASE_WAIT_1 1 diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 4c789279e5..2bcb72c014 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -2027,7 +2027,8 @@ pg_stat_progress_create_index| SELECT s.pid, s.param12 AS tuples_total, s.param13 AS tuples_done, s.param14 AS partitions_total, - s.param15 AS partitions_done + s.param15 AS partitions_done, + s.param18 AS partition_relid FROM (pg_stat_get_progress_info('CREATE INDEX'::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_vacuum| SELECT s.pid, -- 2.39.3 (Apple Git-146)