184

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

select numbackends from pg_stat_database;

select count(*) from pg_stat_activity;
4

5 に答える 5

285

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

SELECT sum(numbackends) FROM pg_stat_database;

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

どちらのクエリもまったく同じデータに基づいているため、同じように正確になります。

于 2011-03-11T08:52:34.680 に答える
47

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

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;
于 2018-11-08T12:54:24.590 に答える
23

彼らは間違いなく異なる結果をもたらすかもしれません。より良いものは

select count(*) from pg_stat_activity;

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

max_wal_sendersを参照してください

于 2019-06-28T11:17:51.807 に答える
7

ステータスごとのすべてのpostgresセッションの集計(アイドル状態のセッションの数、何かを実行しているセッションの数...)

select state, count(*) from pg_stat_activity  where pid <> pg_backend_pid() group by 1 order by 1;
于 2019-12-31T12:07:12.090 に答える
-4

ソースコードを見ると、pg_stat_databaseクエリは、すべてのユーザーの現在のデータベースへの接続数を示しているようです。一方、pg_stat_activityクエリは、クエリを実行しているユーザーに対してのみ、現在のデータベースへの接続数を提供します。

于 2011-03-11T02:42:31.137 に答える