유휴 PostgreSQL 연결에 대한 시간 초과가 있습니까?
1 S postgres 5038 876 0 80 0 - 11962 sk_wai 09:57 ? 00:00:00 postgres: postgres my_app ::1(45035) idle
1 S postgres 9796 876 0 80 0 - 11964 sk_wai 11:01 ? 00:00:00 postgres: postgres my_app ::1(43084) idle
나는 그것들을 많이 본다. 우리는 연결 누출을 수정하려고합니다. 그러나 한편, 이러한 유휴 연결에 대한 제한 시간을 최대 5 분으로 설정하려고합니다.
풀링 된 연결을 닫지 못하기 때문에 응용 프로그램에서 연결 누수 가있는 것 같습니다 . 세션 에만 문제가있는 것이 아니라 전체적으로 너무 많은 연결이 있습니다.<idle> in transaction
연결을 끊는 것은 정답은 아니지만 괜찮은 임시 해결 방법입니다.
PostgreSQL 데이터베이스에서 다른 모든 연결을 부팅하기 위해 PostgreSQL을 다시 시작하는 대신 Postgres 데이터베이스에서 다른 모든 사용자를 분리하려면 어떻게해야합니까?를 참조하십시오. 및 그 활성 연결이있는 경우 어떻게 PostgreSQL 데이터베이스를 삭제하는 방법? . 후자는 더 나은 쿼리를 보여줍니다.
시간 제한을 설정하려면 @Doon이 제안했듯이 PostgreSQL에서 유휴 연결을 자동으로 닫는 방법을 참조하십시오 . , PgBouncer를 사용하여 PostgreSQL 용 프록시를 사용하고 유휴 연결을 관리 할 것을 권장합니다. 어쨌든 연결이 누출되는 버그가있는 응용 프로그램이있는 경우 이것은 매우 좋은 생각입니다. 나는 매우 강력 PgBouncer을 구성하는 것이 좋습니다.
TCP의 킵 얼라이브는 응용 프로그램이 여전히 연결되어 살아 있기 때문에, 그냥 안, 여기에 일을하지 않습니다.
PostgreSQL 9.2 이상에서는 새 state_change
타임 스탬프 열과의 state
필드 pg_stat_activity
를 사용하여 유휴 연결 리퍼를 구현할 수 있습니다. 크론 작업을 다음과 같이 실행하십시오.
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'regress'
AND pid <> pg_backend_pid()
AND state = 'idle'
AND state_change < current_timestamp - INTERVAL '5' MINUTE;
이전 버전에서는 연결이 유휴 상태가 된시기를 추적하는 복잡한 체계를 구현해야합니다. 귀찮게하지 마십시오. pgbouncer를 사용하십시오.
PostgreSQL 9.6에는 idle_in_transaction_session_timeout
설명을 수행 하는 새로운 옵션 이 있습니다. 다음 SET
과 같은 명령을 사용하여 설정할 수 있습니다 .
SET SESSION idle_in_transaction_session_timeout = '5min';
PostgreSQL 9.1에서 다음 쿼리로 유휴 연결. 데이터베이스를 다시 시작해야하는 상황을 방지하는 데 도움이되었습니다. 이것은 주로 JDBC 연결이 열리고 제대로 닫히지 않은 경우 발생합니다.
SELECT
pg_terminate_backend(procpid)
FROM
pg_stat_activity
WHERE
current_query = '<IDLE>'
AND
now() - query_start > '00:10:00';
postgresql 9.6 이상을 사용하는 경우 postgresql.conf에서 다음을 설정할 수 있습니다.
idle_in_transaction_session_timeout = 30000
(밀리 초)
참고 URL : https://stackoverflow.com/questions/13236160/is-there-a-timeout-for-idle-postgresql-connections
'Program Tip' 카테고리의 다른 글
CSS3로 반복되는 육각형 패턴 생성 (0) | 2020.10.11 |
---|---|
node.js 서버를 데몬 프로세스로 어떻게 시작합니까? (0) | 2020.10.11 |
모든 Docker 볼륨을 제거하는 방법은 무엇입니까? (0) | 2020.10.11 |
Rails에서 collection_select의 HTML 옵션을 어떻게 설정하나요? (0) | 2020.10.11 |
뮤텍스를 잠그지 않고 pthread_cond_signal 호출 (0) | 2020.10.11 |