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

Commit9bf760f

Browse files
committed
Add a 'waiting' column to pg_stat_activity to carry the same information
that ps_status provides by appending 'waiting' to the PS display. Thiscompletes the project of making it feasible to turn off process titleupdates and instead rely on pg_stat_activity. Per my suggestion a fewweeks ago.
1 parent1be4390 commit9bf760f

File tree

9 files changed

+83
-13
lines changed

9 files changed

+83
-13
lines changed

‎doc/src/sgml/monitoring.sgml

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!-- $PostgreSQL: pgsql/doc/src/sgml/monitoring.sgml,v 1.36 2006/06/29 20:00:08 tgl Exp $ -->
1+
<!-- $PostgreSQL: pgsql/doc/src/sgml/monitoring.sgml,v 1.37 2006/08/19 01:36:23 tgl Exp $ -->
22

33
<chapter id="monitoring">
44
<title>Monitoring Database Activity</title>
@@ -245,7 +245,8 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
245245
<row>
246246
<entry><structname>pg_stat_activity</></entry>
247247
<entry>One row per server process, showing database OID, database name,
248-
process <acronym>ID</>, user OID, user name, current query, time at
248+
process <acronym>ID</>, user OID, user name, current query, query's
249+
waiting status, time at
249250
which the current query began execution, time at which the process
250251
was started, and client's address and port number. The columns
251252
that report data on the current query are available unless the
@@ -649,6 +650,17 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
649650
</entry>
650651
</row>
651652

653+
<row>
654+
<entry><literal><function>pg_stat_get_backend_waiting</function>(<type>integer</type>)</literal></entry>
655+
<entry><type>boolean</type></entry>
656+
<entry>
657+
True if the given server process is waiting for a lock,
658+
but only if the current user is a superuser or the same user as that of
659+
the session being queried (and
660+
<varname>stats_command_string</varname> is on)
661+
</entry>
662+
</row>
663+
652664
<row>
653665
<entry><literal><function>pg_stat_get_backend_activity_start</function>(<type>integer</type>)</literal></entry>
654666
<entry><type>timestamp with time zone</type></entry>

‎src/backend/catalog/system_views.sql

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* Copyright (c) 1996-2006, PostgreSQL Global Development Group
55
*
6-
* $PostgreSQL: pgsql/src/backend/catalog/system_views.sql,v 1.29 2006/07/27 08:30:41 petere Exp $
6+
* $PostgreSQL: pgsql/src/backend/catalog/system_views.sql,v 1.30 2006/08/19 01:36:24 tgl Exp $
77
*/
88

99
CREATEVIEWpg_rolesAS
@@ -332,7 +332,8 @@ CREATE VIEW pg_stat_activity AS
332332
pg_stat_get_backend_pid(S.backendid)AS procpid,
333333
pg_stat_get_backend_userid(S.backendid)AS usesysid,
334334
U.rolnameAS usename,
335-
pg_stat_get_backend_activity(S.backendid)AS current_query,
335+
pg_stat_get_backend_activity(S.backendid)AS current_query,
336+
pg_stat_get_backend_waiting(S.backendid)AS waiting,
336337
pg_stat_get_backend_activity_start(S.backendid)AS query_start,
337338
pg_stat_get_backend_start(S.backendid)AS backend_start,
338339
pg_stat_get_backend_client_addr(S.backendid)AS client_addr,

‎src/backend/postmaster/pgstat.c

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*
1414
*Copyright (c) 2001-2006, PostgreSQL Global Development Group
1515
*
16-
*$PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.136 2006/07/16 18:17:14 tgl Exp $
16+
*$PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.137 2006/08/19 01:36:24 tgl Exp $
1717
* ----------
1818
*/
1919
#include"postgres.h"
@@ -1358,6 +1358,7 @@ pgstat_bestart(void)
13581358
beentry->st_databaseid=MyDatabaseId;
13591359
beentry->st_userid=userid;
13601360
beentry->st_clientaddr=clientaddr;
1361+
beentry->st_waiting= false;
13611362
beentry->st_activity[0]='\0';
13621363
/* Also make sure the last byte in the string area is always 0 */
13631364
beentry->st_activity[PGBE_ACTIVITY_SIZE-1]='\0';
@@ -1445,6 +1446,31 @@ pgstat_report_activity(const char *cmd_str)
14451446
}
14461447

14471448

1449+
/* ----------
1450+
* pgstat_report_waiting() -
1451+
*
1452+
*Called from lock manager to report beginning or end of a lock wait.
1453+
* ----------
1454+
*/
1455+
void
1456+
pgstat_report_waiting(boolwaiting)
1457+
{
1458+
volatilePgBackendStatus*beentry;
1459+
1460+
if (!pgstat_collect_querystring)
1461+
return;
1462+
1463+
/*
1464+
* Since this is a single-byte field in a struct that only this process
1465+
* may modify, there seems no need to bother with the st_changecount
1466+
* protocol. The update must appear atomic in any case.
1467+
*/
1468+
beentry=MyBEEntry;
1469+
1470+
beentry->st_waiting=waiting;
1471+
}
1472+
1473+
14481474
/* ----------
14491475
* pgstat_read_current_status() -
14501476
*

‎src/backend/storage/lmgr/lock.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/storage/lmgr/lock.c,v 1.170 2006/07/31 20:09:05 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/storage/lmgr/lock.c,v 1.171 2006/08/19 01:36:28 tgl Exp $
1212
*
1313
* NOTES
1414
* A lock table is a shared memory hash table. When
@@ -36,6 +36,7 @@
3636
#include"access/twophase.h"
3737
#include"access/twophase_rmgr.h"
3838
#include"miscadmin.h"
39+
#include"pgstat.h"
3940
#include"storage/lmgr.h"
4041
#include"utils/memutils.h"
4142
#include"utils/ps_status.h"
@@ -1114,6 +1115,7 @@ WaitOnLock(LOCALLOCK *locallock, ResourceOwner owner)
11141115
LOCK_PRINT("WaitOnLock: sleeping on lock",
11151116
locallock->lock,locallock->tag.mode);
11161117

1118+
/* Report change to waiting status */
11171119
if (update_process_title)
11181120
{
11191121
old_status=get_ps_display(&len);
@@ -1123,7 +1125,8 @@ WaitOnLock(LOCALLOCK *locallock, ResourceOwner owner)
11231125
set_ps_display(new_status, false);
11241126
new_status[len]='\0';/* truncate off " waiting" */
11251127
}
1126-
1128+
pgstat_report_waiting(true);
1129+
11271130
awaitedLock=locallock;
11281131
awaitedOwner=owner;
11291132

@@ -1160,11 +1163,13 @@ WaitOnLock(LOCALLOCK *locallock, ResourceOwner owner)
11601163

11611164
awaitedLock=NULL;
11621165

1166+
/* Report change to non-waiting status */
11631167
if (update_process_title)
11641168
{
11651169
set_ps_display(new_status, false);
11661170
pfree(new_status);
11671171
}
1172+
pgstat_report_waiting(false);
11681173

11691174
LOCK_PRINT("WaitOnLock: wakeup on lock",
11701175
locallock->lock,locallock->tag.mode);

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/utils/adt/pgstatfuncs.c,v 1.32 2006/07/14 14:52:24 momjian Exp $
11+
* $PostgreSQL: pgsql/src/backend/utils/adt/pgstatfuncs.c,v 1.33 2006/08/19 01:36:29 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -42,6 +42,7 @@ extern Datum pg_stat_get_backend_pid(PG_FUNCTION_ARGS);
4242
externDatumpg_stat_get_backend_dbid(PG_FUNCTION_ARGS);
4343
externDatumpg_stat_get_backend_userid(PG_FUNCTION_ARGS);
4444
externDatumpg_stat_get_backend_activity(PG_FUNCTION_ARGS);
45+
externDatumpg_stat_get_backend_waiting(PG_FUNCTION_ARGS);
4546
externDatumpg_stat_get_backend_activity_start(PG_FUNCTION_ARGS);
4647
externDatumpg_stat_get_backend_start(PG_FUNCTION_ARGS);
4748
externDatumpg_stat_get_backend_client_addr(PG_FUNCTION_ARGS);
@@ -377,6 +378,25 @@ pg_stat_get_backend_activity(PG_FUNCTION_ARGS)
377378
}
378379

379380

381+
Datum
382+
pg_stat_get_backend_waiting(PG_FUNCTION_ARGS)
383+
{
384+
int32beid=PG_GETARG_INT32(0);
385+
boolresult;
386+
PgBackendStatus*beentry;
387+
388+
if ((beentry=pgstat_fetch_stat_beentry(beid))==NULL)
389+
PG_RETURN_NULL();
390+
391+
if (!superuser()&&beentry->st_userid!=GetUserId())
392+
PG_RETURN_NULL();
393+
394+
result=beentry->st_waiting;
395+
396+
PG_RETURN_BOOL(result);
397+
}
398+
399+
380400
Datum
381401
pg_stat_get_backend_activity_start(PG_FUNCTION_ARGS)
382402
{

‎src/include/catalog/catversion.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
3838
* Portions Copyright (c) 1994, Regents of the University of California
3939
*
40-
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.350 2006/08/17 23:04:08 tgl Exp $
40+
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.351 2006/08/19 01:36:29 tgl Exp $
4141
*
4242
*-------------------------------------------------------------------------
4343
*/
@@ -53,6 +53,6 @@
5353
*/
5454

5555
/*yyyymmddN */
56-
#defineCATALOG_VERSION_NO200608171
56+
#defineCATALOG_VERSION_NO200608181
5757

5858
#endif

‎src/include/catalog/pg_proc.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.421 2006/08/17 23:04:10 tgl Exp $
10+
* $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.422 2006/08/19 01:36:33 tgl Exp $
1111
*
1212
* NOTES
1313
* The script catalog/genbki.sh reads this file and generates .bki
@@ -2898,6 +2898,8 @@ DATA(insert OID = 1939 ( pg_stat_get_backend_useridPGNSP PGUID 12 f f t f s 1
28982898
DESCR("Statistics: User ID of backend");
28992899
DATA(insertOID=1940 (pg_stat_get_backend_activityPGNSPPGUID12fftfs125"23"_null__null__null_pg_stat_get_backend_activity-_null_ ));
29002900
DESCR("Statistics: Current query of backend");
2901+
DATA(insertOID=2853 (pg_stat_get_backend_waitingPGNSPPGUID12fftfs116"23"_null__null__null_pg_stat_get_backend_waiting-_null_ ));
2902+
DESCR("Statistics: Is backend currently waiting for a lock");
29012903
DATA(insertOID=2094 (pg_stat_get_backend_activity_startPGNSPPGUID12fftfs11184"23"_null__null__null_pg_stat_get_backend_activity_start-_null_));
29022904
DESCR("Statistics: Start time for current query of backend");
29032905
DATA(insertOID=1391 (pg_stat_get_backend_startPGNSPPGUID12fftfs11184"23"_null__null__null_pg_stat_get_backend_start-_null_));

‎src/include/pgstat.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*
66
*Copyright (c) 2001-2006, PostgreSQL Global Development Group
77
*
8-
*$PostgreSQL: pgsql/src/include/pgstat.h,v 1.48 2006/06/29 20:00:08 tgl Exp $
8+
*$PostgreSQL: pgsql/src/include/pgstat.h,v 1.49 2006/08/19 01:36:34 tgl Exp $
99
* ----------
1010
*/
1111
#ifndefPGSTAT_H
@@ -334,6 +334,9 @@ typedef struct PgBackendStatus
334334
Oidst_userid;
335335
SockAddrst_clientaddr;
336336

337+
/* Is backend currently waiting on an lmgr lock? */
338+
boolst_waiting;
339+
337340
/* current command string; MUST be null-terminated */
338341
charst_activity[PGBE_ACTIVITY_SIZE];
339342
}PgBackendStatus;
@@ -387,6 +390,7 @@ extern void pgstat_report_analyze(Oid tableoid, bool shared,
387390

388391
externvoidpgstat_bestart(void);
389392
externvoidpgstat_report_activity(constchar*what);
393+
externvoidpgstat_report_waiting(boolwaiting);
390394

391395
externvoidpgstat_initstats(PgStat_Info*stats,Relationrel);
392396

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1287,7 +1287,7 @@ SELECT viewname, definition FROM pg_views WHERE schemaname <> 'information_schem
12871287
pg_rules | SELECT n.nspname AS schemaname, c.relname AS tablename, r.rulename, pg_get_ruledef(r.oid) AS definition FROM ((pg_rewrite r JOIN pg_class c ON ((c.oid = r.ev_class))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (r.rulename <> '_RETURN'::name);
12881288
pg_settings | SELECT a.name, a.setting, a.unit, a.category, a.short_desc, a.extra_desc, a.context, a.vartype, a.source, a.min_val, a.max_val FROM pg_show_all_settings() a(name text, setting text, unit text, category text, short_desc text, extra_desc text, context text, vartype text, source text, min_val text, max_val text);
12891289
pg_shadow | SELECT pg_authid.rolname AS usename, pg_authid.oid AS usesysid, pg_authid.rolcreatedb AS usecreatedb, pg_authid.rolsuper AS usesuper, pg_authid.rolcatupdate AS usecatupd, pg_authid.rolpassword AS passwd, (pg_authid.rolvaliduntil)::abstime AS valuntil, pg_authid.rolconfig AS useconfig FROM pg_authid WHERE pg_authid.rolcanlogin;
1290-
pg_stat_activity | SELECT d.oid AS datid, d.datname, pg_stat_get_backend_pid(s.backendid) AS procpid, pg_stat_get_backend_userid(s.backendid) AS usesysid, u.rolname AS usename, pg_stat_get_backend_activity(s.backendid) AS current_query, pg_stat_get_backend_activity_start(s.backendid) AS query_start, pg_stat_get_backend_start(s.backendid) AS backend_start, pg_stat_get_backend_client_addr(s.backendid) AS client_addr, pg_stat_get_backend_client_port(s.backendid) AS client_port FROM pg_database d, (SELECT pg_stat_get_backend_idset() AS backendid) s, pg_authid u WHERE ((pg_stat_get_backend_dbid(s.backendid) = d.oid) AND (pg_stat_get_backend_userid(s.backendid) = u.oid));
1290+
pg_stat_activity | SELECT d.oid AS datid, d.datname, pg_stat_get_backend_pid(s.backendid) AS procpid, pg_stat_get_backend_userid(s.backendid) AS usesysid, u.rolname AS usename, pg_stat_get_backend_activity(s.backendid) AS current_query,pg_stat_get_backend_waiting(s.backendid) AS waiting,pg_stat_get_backend_activity_start(s.backendid) AS query_start, pg_stat_get_backend_start(s.backendid) AS backend_start, pg_stat_get_backend_client_addr(s.backendid) AS client_addr, pg_stat_get_backend_client_port(s.backendid) AS client_port FROM pg_database d, (SELECT pg_stat_get_backend_idset() AS backendid) s, pg_authid u WHERE ((pg_stat_get_backend_dbid(s.backendid) = d.oid) AND (pg_stat_get_backend_userid(s.backendid) = u.oid));
12911291
pg_stat_all_indexes | SELECT c.oid AS relid, i.oid AS indexrelid, n.nspname AS schemaname, c.relname, i.relname AS indexrelname, pg_stat_get_numscans(i.oid) AS idx_scan, pg_stat_get_tuples_returned(i.oid) AS idx_tup_read, pg_stat_get_tuples_fetched(i.oid) AS idx_tup_fetch FROM (((pg_class c JOIN pg_index x ON ((c.oid = x.indrelid))) JOIN pg_class i ON ((i.oid = x.indexrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char"]));
12921292
pg_stat_all_tables | SELECT c.oid AS relid, n.nspname AS schemaname, c.relname, pg_stat_get_last_vacuum_time(c.oid) AS last_vacuum, pg_stat_get_last_autovacuum_time(c.oid) AS last_autovacuum, pg_stat_get_last_analyze_time(c.oid) AS last_analyze, pg_stat_get_last_autoanalyze_time(c.oid) AS last_autoanalyze, pg_stat_get_numscans(c.oid) AS seq_scan, pg_stat_get_tuples_returned(c.oid) AS seq_tup_read, (sum(pg_stat_get_numscans(i.indexrelid)))::bigint AS idx_scan, ((sum(pg_stat_get_tuples_fetched(i.indexrelid)))::bigint + pg_stat_get_tuples_fetched(c.oid)) AS idx_tup_fetch, pg_stat_get_tuples_inserted(c.oid) AS n_tup_ins, pg_stat_get_tuples_updated(c.oid) AS n_tup_upd, pg_stat_get_tuples_deleted(c.oid) AS n_tup_del FROM ((pg_class c LEFT JOIN pg_index i ON ((c.oid = i.indrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = ANY (ARRAY['r'::"char", 't'::"char"])) GROUP BY c.oid, n.nspname, c.relname;
12931293
pg_stat_database | SELECT d.oid AS datid, d.datname, pg_stat_get_db_numbackends(d.oid) AS numbackends, pg_stat_get_db_xact_commit(d.oid) AS xact_commit, pg_stat_get_db_xact_rollback(d.oid) AS xact_rollback, (pg_stat_get_db_blocks_fetched(d.oid) - pg_stat_get_db_blocks_hit(d.oid)) AS blks_read, pg_stat_get_db_blocks_hit(d.oid) AS blks_hit FROM pg_database d;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp