PostgreSQL은 연결을 max_connections보다 적게 제한합니까?

PostgreSQL은 연결을 max_connections보다 적게 제한합니까?

나는 max_connections에서 정의한 것보다 적은 수로 연결을 제한하는 것으로 보이는 PostgreSQL 9.4 서버를 가지고 있습니다.

max_connections를 300으로 설정했습니다.

SHOW max_connections;

max_connections
-----------------
300

그러나 다음과 같이 측정한 대로 활성 연결이 100에 도달하자마자 새 연결이 시간 초과되기 시작한다는 사실을 발견했습니다.SELECT count(*) from pg_stat_activity;

해당 숫자가 100 미만이면 새 연결이 작동합니다. 100에 도달하면 새 연결이 실패합니다. PG::ConnectionBad: could not connect to server: Connection timed out(Ruby pg 라이브러리)

슈퍼유저 연결(예: PgAdmin을 통해 연결)에는 예외가 있는 것 같습니다. 그런 식으로 100개 임계값을 초과할 수 있지만 슈퍼유저를 사용하지 않는 앱은 계속 시간 초과됩니다.

근본 원인이 무엇인지 정확히 파악하는 데 어려움을 겪고 있습니다.

일부 구성 설정:

max_connections = 300
superuser_reserved_connections = 2
shared_buffers = 1024MB
effective_cache_size = 2048MB
work_mem = 8MB
maintenance_work_mem = 256MB

나는 이 값들을 약간 조작해 보았지만 아무런 유용한 효과도 얻지 못했습니다.

그 외 세부 사항:

  • 우분투 14.04 64비트
  • 4GB 리노드 VPS
  • 포스트그레SQL 9.4.1
  • PostgreSQL 9.2에서 본질적으로 동일한 구성으로 이 문제가 발생하지 않았습니다.
  • 데이터베이스는 pg_dumpall을 통해 Postgres 9.2에서 마이그레이션되었습니다.
  • 메모리 사용량은 문제가 되지 않는 것 같습니다. free여유 공간은 2.1GB이고 버퍼/캐시를 포함하면 3.5GB입니다.
  • 연결은 다양한 데이터베이스에 대한 다양한 역할을 위한 것이며, 개별 DB에는 5~6개 이상의 활성 연결이 없으며, 각 DB는 자체 별도의 역할에 의해 액세스됩니다. 개별 DB 또는 역할에 대한 연결 제한을 위반하지 않는 것 같습니다.

답변1

커널 최대 세그먼트 크기도 늘렸습니까?

노력하다:

sysctl -w kernel.shmmax=1258291200

답변2

최대 사용자 연결을 제한했을 가능성이 있습니까?역할 권한

당신은 이것을 변경할 수 있습니다

ALTER ROLE 역할 이름 CONNECTION LIMIT 300;

관련 정보