次の2つのうち、どちらがより正確ですか?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
これらの2つの要件は同等ではありません。最初のバージョンと同等のバージョンは次のとおりです。
SELECT sum(numbackends) FROM pg_stat_database;
その場合、カウントする行数が少ないという理由だけで、そのバージョンは2番目のバージョンよりもわずかに高速になると予想されます。しかし、違いを測定できる可能性は低いでしょう。
両方のクエリはまったく同じデータに基づいているため、同等に正確です。
次のクエリは非常に役立ちます
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;
通常の接続として扱われ、max_connections
にカウントされるWAL送信プロセスへの接続が含まれているためです。
max_wal_senders を参照してください
TCP接続の数が役立ちます。特定のデータベース用ではないことに注意してください
netstat -a -n | find /c "127.0.0.1:13306"