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


답변:


226

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

SELECT sum(numbackends) FROM pg_stat_database;

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

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


1
사실은 정확하지 않습니다. 내 대답을 참조하십시오.
gargii 2016 년

2
psql의 연결은 또한 연결로 포함 했으니 - 1 포스트 그레스 라인 도구를 명령하면 PSQL이 쿼리를 실행하기 위해 사용되는 주, 연결의 수는이 쿼리의 결과
neonidian

25

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

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;

2
'사용 된'및 'res_for_super'열이 무엇인지 설명 할 수 있습니까?
베팅

안녕하세요, res_for_super은 (는) 수퍼 유저 액세스를 위해 예약 된 연결입니다
tbo

12

그들은 분명히 다른 결과를 줄 수 있습니다. 더 좋은 것은

select count(*) from pg_stat_activity;

WAL 발신자 프로세스에 대한 연결이 포함되어 있기 때문입니다.이 프로세스는 일반 연결로 취급되고에 반영됩니다 max_connections.

max_wal_senders 참조


2

상태별로 모든 postgres 세션 집계 (유휴 상태, 수행 횟수 등)

select state, count(*) from pg_stat_activity  where pid <> pg_backend_pid() group by 1 order by 1;

0

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

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

1
이 의견은 Windows 기반 OS에 대한 것입니다. Linux의 경우 다음 중 하나 일 수 있습니다. lsof -Pni : 5432 | fgrep ">"| fgrep -i built | wc -l
XXL

3
이것은 SQL 쿼리가 아니며 특정 질문에 노이즈를 추가하지 마십시오.
bugmenot123

-3

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


1
맞습니다. pg_stat_activity는 사용자에 관계없이 모든 연결을 제공합니다. 그런 다음 원하는 사용자를 알려주는 필드를 제공하여 원하는 경우 필터링 할 수 있습니다. 동일한 사용자 또는 수퍼 유저가 아닌 경우 쿼리 텍스트를 제공 하지 않지만 여전히 연결을 표시합니다.
Magnus Hagander

3
네가 옳아. 뷰 정의를 자세히 보지 않았습니다. userid에 대한 제한은 pg_authid에 대한 조인입니다. 내 실수.
Brian L
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.