web-dev-qa-db-ja.com

PostgreSQL DBの現在の接続数を取得する正しいクエリ

次の2つのうち、どちらがより正確ですか?

select numbackends from pg_stat_database;

select count(*) from pg_stat_activity;
114
Murali VP

これらの2つの要件は同等ではありません。最初のバージョンと同等のバージョンは次のとおりです。

SELECT sum(numbackends) FROM pg_stat_database;

その場合、カウントする行数が少ないという理由だけで、そのバージョンは2番目のバージョンよりもわずかに高速になると予想されます。しかし、違いを測定できる可能性は低いでしょう。

両方のクエリはまったく同じデータに基づいているため、同等に正確です。

181
Magnus Hagander

次のクエリは非常に役立ちます

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;
14
tbo

彼らは間違いなく異なる結果を与える可能性があります。より良いものは

select count(*) from pg_stat_activity;

通常の接続として扱われ、max_connectionsにカウントされるWAL送信プロセスへの接続が含まれているためです。

max_wal_senders を参照してください

2
gargii

TCP接続の数が役立ちます。特定のデータベース用ではないことに注意してください

netstat -a -n | find /c "127.0.0.1:13306"