回答:
これら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;
これは、通常の接続として扱われ、にカウントされるWAL送信者プロセスへの接続が含まれているためmax_connections
です。
max_wal_sendersを参照してください
TCP接続の数が役立ちます。特定のデータベース用ではないことに注意してください
netstat -a -n | find /c "127.0.0.1:13306"
ソースコードを見ると、pg_stat_databaseクエリは、すべてのユーザーの現在のデータベースへの接続数を提供しているようです。一方、pg_stat_activityクエリは、現在のデータベースへの接続数を、クエリを実行しているユーザーのみに提供します。