내 응용 프로그램 (클라이언트 측)에서 연결 및 명령 시간 초과를 10 분으로 설정했습니다.
내 응용 프로그램이 간단한 쿼리를 실행하는 것보다 : SELECT pg_sleep(65)
일부 서버에서는 제대로 작동하지만 다른 서버는 60 초 후에 연결을 닫습니다.
시간 초과를 제한하고 클라이언트 설정을 무시하는 일종의 PostgreSQL 서버 구성 일 수 있습니까?
답변
네 가능합니다
문서에 언급 된 두 가지 설정 이 있습니다 ( idle_in_transaction_session_timeout
버전 9.6x의 새로운 기능)
statement_timeout
(정수)
명령이 클라이언트에서 서버에 도달 한 시점부터 시작하여 지정된 시간 (밀리 초) 이상 걸리는 명령문을 중단하십시오. log_min_error_statement가 ERROR 이하로 설정되면 시간 종료 된 명령문도 로그됩니다. 값이 0이면 (기본값)이 기능이 꺼집니다.
postgresql.conf에서 statement_timeout을 설정하면 모든 세션에 영향을 미치므로 권장하지 않습니다.
idle_in_transaction_session_timeout
(정수)
지정된 기간보다 오래 유휴 상태 인 열린 트랜잭션이있는 세션을 밀리 초 단위로 종료하십시오. 이를 통해 해당 세션이 보유한 잠금을 해제하고 연결 슬롯을 재사용 할 수 있습니다. 또한이 트랜잭션에서만 볼 수있는 튜플을 정리할 수 있습니다. 이에 대한 자세한 내용은 24.1 절을 참조하십시오.
기본값 0은이 기능을 비활성화합니다.
오락을 원하지 않는 한 postgresql.conf를 설정 하지 않는 것이 중요합니다 statement_timeout
.
다음은 작동하는 예입니다.
SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR: canceling statement due to statement timeout
답변
상자에서 꺼내지 마십시오. 그러나 설정을 무시한 사용자 정의 서버를 컴파일하는 것은 매우 쉽습니다.
그러나 유휴 연결을 좋아하지 않는 방화벽이나 게이트웨이로 인해 연결이 끊어 질 가능성이 훨씬 큽니다.
서버의 로그 파일에 액세스 할 수 있다면 좋은 실마리가 될 것입니다. 클라이언트가 서버가 예기치 않게 연결을 종료했다고 말하고 서버가 클라이언트가 연결을 예기치 않게 닫았다 고하면 실제로 클라이언트와 서버 사이에 연결이 끊어진 것일 수 있습니다.
답변
네 가능합니다. 몇 가지 연결 매개 변수를 설정해야합니다.
아래 링크를 참조하십시오.
https://jdbc.postgresql.org/documentation/head/connect.html
loginTimeout connectTimeout 소켓 Timeout cancelSignalTimeout