[sql] PostgreSQL DB에서 현재 연결 수를 가져 오는 올바른 쿼리

다음 중 어느 것이 더 정확합니까?

select numbackends from pg_stat_database;

select count(*) from pg_stat_activity;



답변

이 두 가지 요구 사항은 동일하지 않습니다. 첫 번째 버전과 동등한 버전은 다음과 같습니다.

SELECT sum(numbackends) FROM pg_stat_database;

이 경우 계산할 행 수가 적기 때문에 두 번째 버전보다 약간 빠를 것으로 예상됩니다. 그러나 차이를 측정 할 수 없을 것입니다.

두 쿼리 모두 정확히 동일한 데이터를 기반으로하므로 동일하게 정확합니다.


답변

다음 쿼리는 매우 유용합니다

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;


답변

TCP 연결 수가 도움이됩니다. 특정 데이터베이스 용이 아님을 기억하십시오

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


답변

소스 코드를 보면 pg_stat_database 쿼리가 모든 사용자의 현재 데이터베이스에 대한 연결 수를 제공하는 것처럼 보입니다. 반면, pg_stat_activity 조회는 조회 사용자에게만 현재 데이터베이스에 대한 연결 수를 제공합니다.


답변