Which of the following two is more accurate?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
Which of the following two is more accurate?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
这两个要求是不等价的。第一个的等效版本是:
SELECT sum(numbackends) FROM pg_stat_database;
在这种情况下,我希望该版本比第二个版本稍快,仅仅是因为它需要计算的行数较少。但是您不太可能能够衡量差异。
两个查询都基于完全相同的数据,因此它们将同样准确。
以下查询非常有帮助
select * from
(select count(*) used from pg_stat_activity) q1,
(select setting::int res_for_super from pg_settings where name=$$superuser_reserved_connections$$) q2,
(select setting::int max_conn from pg_settings where name=$$max_connections$$) q3;
他们肯定会给出不同的结果。更好的是
select count(*) from pg_stat_activity;
这是因为它包括与 WAL 发送方进程的连接,这些连接被视为常规连接并计入max_connections
.
根据状态聚合所有 postgres 会话(有多少是空闲的,有多少在做某事......)
select state, count(*) from pg_stat_activity where pid <> pg_backend_pid() group by 1 order by 1;
通过查看源代码,似乎 pg_stat_database 查询为您提供了所有用户与当前数据库的连接数。另一方面,pg_stat_activity 查询只为查询用户提供到当前数据库的连接数。