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

Mur*_* VP 123 sql database postgresql dbconnection

以下哪两个更准确?

select numbackends from pg_stat_database;

select count(*) from pg_stat_activity;
Run Code Online (Sandbox Code Playgroud)

Mag*_*der 193

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

SELECT sum(numbackends) FROM pg_stat_database;
Run Code Online (Sandbox Code Playgroud)

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

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

  • 请注意,当使用 postgres 命令行工具 PSQL 执行此查询时,连接总数是此查询的结果 - 1,因为建立的 psql 连接也包含在连接中 (4认同)
  • 不正确,它们同样准确。看我的回答。 (2认同)

tbo*_*tbo 16

以下查询非常有用

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;
Run Code Online (Sandbox Code Playgroud)

  • 您能解释一下“已使用”和“ res_for_super”列吗? (2认同)

小智 6

根据状态汇总所有 postgres 会话(有多少空闲,有多少在做某事......)

select state, count(*) from pg_stat_activity  where pid <> pg_backend_pid() group by 1 order by 1;
Run Code Online (Sandbox Code Playgroud)


gar*_*gii 5

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

select count(*) from pg_stat_activity;
Run Code Online (Sandbox Code Playgroud)

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

参见max_wal_senders