Commit c880096d authored by Peter Eisentraut's avatar Peter Eisentraut

Add command column to pg_stat_progress_create_index

This allows determining which command is running, similar to
pg_stat_progress_cluster.

Discussion: https://www.postgresql.org/message-id/flat/f0e56b3b-74b7-6cbc-e207-a5ed6bee18dc%402ndquadrant.com
parent 041a2642
...@@ -3534,6 +3534,15 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid, ...@@ -3534,6 +3534,15 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
<entry>OID of the index being created or reindexed. During a <entry>OID of the index being created or reindexed. During a
non-concurrent <command>CREATE INDEX</command>, this is 0.</entry> non-concurrent <command>CREATE INDEX</command>, this is 0.</entry>
</row> </row>
<row>
<entry><structfield>command</structfield></entry>
<entry><type>text</type></entry>
<entry>
The command that is running: <literal>CREATE INDEX</literal>,
<literal>CREATE INDEX CONCURRENTLY</literal>,
<literal>REINDEX</literal>, or <literal>REINDEX CONCURRENTLY</literal>.
</entry>
</row>
<row> <row>
<entry><structfield>phase</structfield></entry> <entry><structfield>phase</structfield></entry>
<entry><type>text</type></entry> <entry><type>text</type></entry>
...@@ -3965,7 +3974,7 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid, ...@@ -3965,7 +3974,7 @@ SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
<entry><structfield>command</structfield></entry> <entry><structfield>command</structfield></entry>
<entry><type>text</type></entry> <entry><type>text</type></entry>
<entry> <entry>
The command that is running. Either CLUSTER or VACUUM FULL. The command that is running. Either <literal>CLUSTER</literal> or <literal>VACUUM FULL</literal>.
</entry> </entry>
</row> </row>
<row> <row>
......
...@@ -3278,6 +3278,8 @@ reindex_index(Oid indexId, bool skip_constraint_checks, char persistence, ...@@ -3278,6 +3278,8 @@ reindex_index(Oid indexId, bool skip_constraint_checks, char persistence,
pgstat_progress_start_command(PROGRESS_COMMAND_CREATE_INDEX, pgstat_progress_start_command(PROGRESS_COMMAND_CREATE_INDEX,
heapId); heapId);
pgstat_progress_update_param(PROGRESS_CREATEIDX_COMMAND,
PROGRESS_CREATEIDX_COMMAND_REINDEX);
pgstat_progress_update_param(PROGRESS_CREATEIDX_INDEX_OID, pgstat_progress_update_param(PROGRESS_CREATEIDX_INDEX_OID,
indexId); indexId);
......
...@@ -956,6 +956,11 @@ CREATE VIEW pg_stat_progress_create_index AS ...@@ -956,6 +956,11 @@ CREATE VIEW pg_stat_progress_create_index AS
S.pid AS pid, S.datid AS datid, D.datname AS datname, S.pid AS pid, S.datid AS datid, D.datname AS datname,
S.relid AS relid, S.relid AS relid,
CAST(S.param7 AS oid) AS index_relid, CAST(S.param7 AS oid) AS index_relid,
CASE S.param1 WHEN 1 THEN 'CREATE INDEX'
WHEN 2 THEN 'CREATE INDEX CONCURRENTLY'
WHEN 3 THEN 'REINDEX'
WHEN 4 THEN 'REINDEX CONCURRENTLY'
END AS command,
CASE S.param10 WHEN 0 THEN 'initializing' CASE S.param10 WHEN 0 THEN 'initializing'
WHEN 1 THEN 'waiting for writers before build' WHEN 1 THEN 'waiting for writers before build'
WHEN 2 THEN 'building index' || WHEN 2 THEN 'building index' ||
......
...@@ -498,8 +498,14 @@ DefineIndex(Oid relationId, ...@@ -498,8 +498,14 @@ DefineIndex(Oid relationId,
* done. * done.
*/ */
if (!OidIsValid(parentIndexId)) if (!OidIsValid(parentIndexId))
{
pgstat_progress_start_command(PROGRESS_COMMAND_CREATE_INDEX, pgstat_progress_start_command(PROGRESS_COMMAND_CREATE_INDEX,
relationId); relationId);
pgstat_progress_update_param(PROGRESS_CREATEIDX_COMMAND,
stmt->concurrent ?
PROGRESS_CREATEIDX_COMMAND_CREATE_CONCURRENTLY :
PROGRESS_CREATEIDX_COMMAND_CREATE);
}
/* /*
* No index OID to report yet * No index OID to report yet
...@@ -2923,6 +2929,8 @@ ReindexRelationConcurrently(Oid relationOid, int options) ...@@ -2923,6 +2929,8 @@ ReindexRelationConcurrently(Oid relationOid, int options)
pgstat_progress_start_command(PROGRESS_COMMAND_CREATE_INDEX, pgstat_progress_start_command(PROGRESS_COMMAND_CREATE_INDEX,
RelationGetRelid(heapRel)); RelationGetRelid(heapRel));
pgstat_progress_update_param(PROGRESS_CREATEIDX_COMMAND,
PROGRESS_CREATEIDX_COMMAND_REINDEX_CONCURRENTLY);
pgstat_progress_update_param(PROGRESS_CREATEIDX_INDEX_OID, pgstat_progress_update_param(PROGRESS_CREATEIDX_INDEX_OID,
indexId); indexId);
pgstat_progress_update_param(PROGRESS_CREATEIDX_ACCESS_METHOD_OID, pgstat_progress_update_param(PROGRESS_CREATEIDX_ACCESS_METHOD_OID,
......
...@@ -53,6 +53,6 @@ ...@@ -53,6 +53,6 @@
*/ */
/* yyyymmddN */ /* yyyymmddN */
#define CATALOG_VERSION_NO 201906031 #define CATALOG_VERSION_NO 201906041
#endif #endif
...@@ -59,6 +59,7 @@ ...@@ -59,6 +59,7 @@
/* Progress parameters for CREATE INDEX */ /* Progress parameters for CREATE INDEX */
/* 3, 4 and 5 reserved for "waitfor" metrics */ /* 3, 4 and 5 reserved for "waitfor" metrics */
#define PROGRESS_CREATEIDX_COMMAND 0
#define PROGRESS_CREATEIDX_INDEX_OID 6 #define PROGRESS_CREATEIDX_INDEX_OID 6
#define PROGRESS_CREATEIDX_ACCESS_METHOD_OID 8 #define PROGRESS_CREATEIDX_ACCESS_METHOD_OID 8
#define PROGRESS_CREATEIDX_PHASE 9 /* AM-agnostic phase # */ #define PROGRESS_CREATEIDX_PHASE 9 /* AM-agnostic phase # */
...@@ -86,6 +87,12 @@ ...@@ -86,6 +87,12 @@
#define PROGRESS_CREATEIDX_SUBPHASE_INITIALIZE 1 #define PROGRESS_CREATEIDX_SUBPHASE_INITIALIZE 1
/* Additional phases are defined by each AM */ /* Additional phases are defined by each AM */
/* Commands of PROGRESS_CREATEIDX */
#define PROGRESS_CREATEIDX_COMMAND_CREATE 1
#define PROGRESS_CREATEIDX_COMMAND_CREATE_CONCURRENTLY 2
#define PROGRESS_CREATEIDX_COMMAND_REINDEX 3
#define PROGRESS_CREATEIDX_COMMAND_REINDEX_CONCURRENTLY 4
/* Lock holder wait counts */ /* Lock holder wait counts */
#define PROGRESS_WAITFOR_TOTAL 3 #define PROGRESS_WAITFOR_TOTAL 3
#define PROGRESS_WAITFOR_DONE 4 #define PROGRESS_WAITFOR_DONE 4
......
...@@ -1879,6 +1879,13 @@ pg_stat_progress_create_index| SELECT s.pid, ...@@ -1879,6 +1879,13 @@ pg_stat_progress_create_index| SELECT s.pid,
d.datname, d.datname,
s.relid, s.relid,
(s.param7)::oid AS index_relid, (s.param7)::oid AS index_relid,
CASE s.param1
WHEN 1 THEN 'CREATE INDEX'::text
WHEN 2 THEN 'CREATE INDEX CONCURRENTLY'::text
WHEN 3 THEN 'REINDEX'::text
WHEN 4 THEN 'REINDEX CONCURRENTLY'::text
ELSE NULL::text
END AS command,
CASE s.param10 CASE s.param10
WHEN 0 THEN 'initializing'::text WHEN 0 THEN 'initializing'::text
WHEN 1 THEN 'waiting for writers before build'::text WHEN 1 THEN 'waiting for writers before build'::text
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment