次の2つのうちどちらがより正確ですか?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
次の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;
これは、通常の接続として扱われ、にカウントされるWAL送信者プロセスへの接続が含まれているためmax_connections
です。
max_wal_sendersを参照してください
ステータスごとのすべてのpostgresセッションの集計(アイドル状態のセッションの数、何かを実行しているセッションの数...)
select state, count(*) from pg_stat_activity where pid <> pg_backend_pid() group by 1 order by 1;
ソースコードを見ると、pg_stat_databaseクエリは、すべてのユーザーの現在のデータベースへの接続数を示しているようです。一方、pg_stat_activityクエリは、クエリを実行しているユーザーに対してのみ、現在のデータベースへの接続数を提供します。