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

时间:2011-03-11 00:37:45

标签: sql database postgresql dbconnection

以下哪两项更准确?

select numbackends from pg_stat_database;

select count(*) from pg_stat_activity;

6 个答案:

答案 0 :(得分:175)

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

SELECT sum(numbackends) FROM pg_stat_database;

在这种情况下,我希望该版本比第二版快一点,因为它的行数要少。但你不太可能衡量差异。

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

答案 1 :(得分:12)

以下查询非常有帮助

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;

答案 2 :(得分:1)

没有tcp连接可以帮到你。请记住,它不适用于特定数据库

netstat -a -n |找到/ c“127.0.0.1:13306”

答案 3 :(得分:0)

他们肯定会给出不同的结果。更好的是

select count(*) from pg_stat_activity;

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

请参见max_wal_senders

答案 4 :(得分:0)

所有postgres会话的状态汇总(有多少处于空闲状态,有多少处于执行状态...)

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

答案 5 :(得分:-3)

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