获取 PostgreSQL 数据库中当前连接数的正确查询

问题描述 投票:0回答:5

以下两个哪个更准确?

select numbackends from pg_stat_database;

select count(*) from pg_stat_activity;
sql database postgresql dbconnection
5个回答
341
投票

这两个查询并不等同。第一个版本的等效版本是:

SELECT sum(numbackends) FROM pg_stat_database;

在这种情况下,我希望该版本比第二个版本稍快,因为它需要计算的行数较少。但您不太可能能够测量差异。

两个查询都基于完全相同的数据,因此它们同样准确。


68
投票

以下查询非常有帮助

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;

38
投票

他们肯定会给出不同的结果。那个比较好

select count(*) from pg_stat_activity;

这是因为它包含与 WAL 发送进程的连接,这些连接被视为常规连接并计入

max_connections

参见 max_wal_senders


17
投票

根据状态聚合所有 postgres 会话(有多少处于空闲状态、有多少在做某事...)

select state, count(*) from pg_stat_activity  where pid <> pg_backend_pid() group by 1 order by 1;

-4
投票

从源代码来看,pg_stat_database 查询似乎为您提供了所有用户与当前数据库的连接数。另一方面,pg_stat_activity 查询仅为查询用户提供当前数据库的连接数。

© www.soinside.com 2019 - 2024. All rights reserved.