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
This commit is contained in:
Peter Eisentraut 2019-06-04 09:16:02 +02:00
parent 041a2642e5
commit c880096dc1
7 changed files with 40 additions and 2 deletions

View File

@ -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,
<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>

View File

@ -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);

View File

@ -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' ||

View File

@ -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)
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,

View File

@ -53,6 +53,6 @@
*/ */
/* yyyymmddN */ /* yyyymmddN */
#define CATALOG_VERSION_NO 201906031 #define CATALOG_VERSION_NO 201906041
#endif #endif

View File

@ -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 @@
#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

View File

@ -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