Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb025f32

Browse files
committed
Add leader_pid to pg_stat_activity
This new field tracks the PID of the group leader used with parallelquery. For parallel workers and the leader, the value is set to thePID of the group leader. So, for the group leader, the value is thesame as its own PID. Note that this reflects what PGPROC stores inshared memory, so as leader_pid is NULL if a backend has never beeninvolved in parallel query. If the backend is using parallel query orhas used it at least once, the value is set until the backend exits.Author: Julien RouhaudReviewed-by: Sergei Kornilov, Guillaume Lelarge, Michael Paquier, TomasVondraDiscussion:https://postgr.es/m/CAOBaU_Yy5bt0vTPZ2_LUM6cUcGeqmYNoJ8-Rgto+c2+w3defYA@mail.gmail.com
1 parentbf6cc19 commitb025f32

File tree

5 files changed

+47
-25
lines changed

5 files changed

+47
-25
lines changed

‎doc/src/sgml/monitoring.sgml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,18 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser
622622
<entry><type>integer</type></entry>
623623
<entry>Process ID of this backend</entry>
624624
</row>
625+
<row>
626+
<entry><structfield>leader_pid</structfield></entry>
627+
<entry><type>integer</type></entry>
628+
<entry>
629+
Process ID of the parallel group leader if this process is or
630+
has been involved in parallel query, or null. This field is set
631+
when a process wants to cooperate with parallel workers, and
632+
remains set as long as the process exists. For a parallel group leader,
633+
this field is set to its own process ID. For a parallel worker,
634+
this field is set to the process ID of the parallel group leader.
635+
</entry>
636+
</row>
625637
<row>
626638
<entry><structfield>usesysid</structfield></entry>
627639
<entry><type>oid</type></entry>

‎src/backend/catalog/system_views.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,7 @@ CREATE VIEW pg_stat_activity AS
741741
S.datidAS datid,
742742
D.datnameAS datname,
743743
S.pid,
744+
S.leader_pid,
744745
S.usesysid,
745746
U.rolnameAS usename,
746747
S.application_name,

‎src/backend/utils/adt/pgstatfuncs.c

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ pg_stat_get_progress_info(PG_FUNCTION_ARGS)
547547
Datum
548548
pg_stat_get_activity(PG_FUNCTION_ARGS)
549549
{
550-
#definePG_STAT_GET_ACTIVITY_COLS29
550+
#definePG_STAT_GET_ACTIVITY_COLS30
551551
intnum_backends=pgstat_fetch_stat_numbackends();
552552
intcurr_backend;
553553
intpid=PG_ARGISNULL(0) ?-1 :PG_GETARG_INT32(0);
@@ -686,33 +686,40 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
686686
values[5]=CStringGetTextDatum(clipped_activity);
687687
pfree(clipped_activity);
688688

689-
proc=BackendPidGetProc(beentry->st_procpid);
690-
if (proc!=NULL)
691-
{
692-
uint32raw_wait_event;
689+
/* leader_pid */
690+
nulls[29]= true;
693691

694-
raw_wait_event=UINT32_ACCESS_ONCE(proc->wait_event_info);
695-
wait_event_type=pgstat_get_wait_event_type(raw_wait_event);
696-
wait_event=pgstat_get_wait_event(raw_wait_event);
692+
proc=BackendPidGetProc(beentry->st_procpid);
697693

698-
}
699-
elseif (beentry->st_backendType!=B_BACKEND)
694+
if (proc==NULL&& (beentry->st_backendType!=B_BACKEND))
700695
{
701696
/*
702697
* For an auxiliary process, retrieve process info from
703698
* AuxiliaryProcs stored in shared-memory.
704699
*/
705700
proc=AuxiliaryPidGetProc(beentry->st_procpid);
701+
}
706702

707-
if (proc!=NULL)
708-
{
709-
uint32raw_wait_event;
703+
/*
704+
* If a PGPROC entry was retrieved, display wait events and lock
705+
* group leader information if any. To avoid extra overhead, no
706+
* extra lock is being held, so there is no guarantee of
707+
* consistency across multiple rows.
708+
*/
709+
if (proc!=NULL)
710+
{
711+
uint32raw_wait_event;
712+
PGPROC*leader;
710713

711-
raw_wait_event=
712-
UINT32_ACCESS_ONCE(proc->wait_event_info);
713-
wait_event_type=
714-
pgstat_get_wait_event_type(raw_wait_event);
715-
wait_event=pgstat_get_wait_event(raw_wait_event);
714+
raw_wait_event=UINT32_ACCESS_ONCE(proc->wait_event_info);
715+
wait_event_type=pgstat_get_wait_event_type(raw_wait_event);
716+
wait_event=pgstat_get_wait_event(raw_wait_event);
717+
718+
leader=proc->lockGroupLeader;
719+
if (leader)
720+
{
721+
values[29]=Int32GetDatum(leader->pid);
722+
nulls[29]= false;
716723
}
717724
}
718725

@@ -908,6 +915,7 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
908915
nulls[26]= true;
909916
nulls[27]= true;
910917
nulls[28]= true;
918+
nulls[29]= true;
911919
}
912920

913921
tuplestore_putvalues(tupstore,tupdesc,values,nulls);

‎src/include/catalog/pg_proc.dat

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5175,9 +5175,9 @@
51755175
proname => 'pg_stat_get_activity', prorows => '100', proisstrict => 'f',
51765176
proretset => 't', provolatile => 's', proparallel => 'r',
51775177
prorettype => 'record', proargtypes => 'int4',
5178-
proallargtypes => '{int4,oid,int4,oid,text,text,text,text,text,timestamptz,timestamptz,timestamptz,timestamptz,inet,text,int4,xid,xid,text,bool,text,text,int4,bool,text,numeric,text,bool,text,bool}',
5179-
proargmodes => '{i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}',
5180-
proargnames => '{pid,datid,pid,usesysid,application_name,state,query,wait_event_type,wait_event,xact_start,query_start,backend_start,state_change,client_addr,client_hostname,client_port,backend_xid,backend_xmin,backend_type,ssl,sslversion,sslcipher,sslbits,sslcompression,ssl_client_dn,ssl_client_serial,ssl_issuer_dn,gss_auth,gss_princ,gss_enc}',
5178+
proallargtypes => '{int4,oid,int4,oid,text,text,text,text,text,timestamptz,timestamptz,timestamptz,timestamptz,inet,text,int4,xid,xid,text,bool,text,text,int4,bool,text,numeric,text,bool,text,bool,int4}',
5179+
proargmodes => '{i,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}',
5180+
proargnames => '{pid,datid,pid,usesysid,application_name,state,query,wait_event_type,wait_event,xact_start,query_start,backend_start,state_change,client_addr,client_hostname,client_port,backend_xid,backend_xmin,backend_type,ssl,sslversion,sslcipher,sslbits,sslcompression,ssl_client_dn,ssl_client_serial,ssl_issuer_dn,gss_auth,gss_princ,gss_enc,leader_pid}',
51815181
prosrc => 'pg_stat_get_activity' },
51825182
{ oid => '3318',
51835183
descr => 'statistics: information about progress of backends running maintenance command',

‎src/test/regress/expected/rules.out

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1730,6 +1730,7 @@ pg_shmem_allocations| SELECT pg_get_shmem_allocations.name,
17301730
pg_stat_activity| SELECT s.datid,
17311731
d.datname,
17321732
s.pid,
1733+
s.leader_pid,
17331734
s.usesysid,
17341735
u.rolname AS usename,
17351736
s.application_name,
@@ -1747,7 +1748,7 @@ pg_stat_activity| SELECT s.datid,
17471748
s.backend_xmin,
17481749
s.query,
17491750
s.backend_type
1750-
FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, sslcompression, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc)
1751+
FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, sslcompression, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid)
17511752
LEFT JOIN pg_database d ON ((s.datid = d.oid)))
17521753
LEFT JOIN pg_authid u ON ((s.usesysid = u.oid)));
17531754
pg_stat_all_indexes| SELECT c.oid AS relid,
@@ -1851,7 +1852,7 @@ pg_stat_gssapi| SELECT s.pid,
18511852
s.gss_auth AS gss_authenticated,
18521853
s.gss_princ AS principal,
18531854
s.gss_enc AS encrypted
1854-
FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, sslcompression, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc)
1855+
FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, sslcompression, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid)
18551856
WHERE (s.client_port IS NOT NULL);
18561857
pg_stat_progress_analyze| SELECT s.pid,
18571858
s.datid,
@@ -1984,7 +1985,7 @@ pg_stat_replication| SELECT s.pid,
19841985
w.spill_txns,
19851986
w.spill_count,
19861987
w.spill_bytes
1987-
FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, sslcompression, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc)
1988+
FROM ((pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, sslcompression, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid)
19881989
JOIN pg_stat_get_wal_senders() w(pid, state, sent_lsn, write_lsn, flush_lsn, replay_lsn, write_lag, flush_lag, replay_lag, sync_priority, sync_state, reply_time, spill_txns, spill_count, spill_bytes) ON ((s.pid = w.pid)))
19891990
LEFT JOIN pg_authid u ON ((s.usesysid = u.oid)));
19901991
pg_stat_ssl| SELECT s.pid,
@@ -1996,7 +1997,7 @@ pg_stat_ssl| SELECT s.pid,
19961997
s.ssl_client_dn AS client_dn,
19971998
s.ssl_client_serial AS client_serial,
19981999
s.ssl_issuer_dn AS issuer_dn
1999-
FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, sslcompression, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc)
2000+
FROM pg_stat_get_activity(NULL::integer) s(datid, pid, usesysid, application_name, state, query, wait_event_type, wait_event, xact_start, query_start, backend_start, state_change, client_addr, client_hostname, client_port, backend_xid, backend_xmin, backend_type, ssl, sslversion, sslcipher, sslbits, sslcompression, ssl_client_dn, ssl_client_serial, ssl_issuer_dn, gss_auth, gss_princ, gss_enc, leader_pid)
20002001
WHERE (s.client_port IS NOT NULL);
20012002
pg_stat_subscription| SELECT su.oid AS subid,
20022003
su.subname,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp