Postgres 서버에서 시간 초과를 제한 할 수 있습니까?


17

내 응용 프로그램 (클라이언트 측)에서 연결 및 명령 시간 초과를 10 분으로 설정했습니다.

내 응용 프로그램이 간단한 쿼리를 실행하는 것보다 : SELECT pg_sleep(65)

일부 서버에서는 제대로 작동하지만 다른 서버는 60 초 후에 연결을 닫습니다.

시간 초과를 제한하고 클라이언트 설정을 무시하는 일종의 PostgreSQL 서버 구성 일 수 있습니까?


현재 시간 초과를 보려면 :SHOW statement_timeout;
사용자

답변:


27

네 가능합니다

문서에 언급 된 두 가지 설정 이 있습니다 ( 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

설정 파일에 설정이 없으므로 기본값을 사용하고 있습니다. :( 다른 아이디어가 있습니까?
Andrzej Gis

@ gisek 확실히, 그것은 로컬 IP 스택이나 방화벽에서 네트워크 수준의 무언가 일 수 있습니다.
Evan Carroll

4

상자에서 꺼내지 마십시오. 그러나 설정을 무시한 사용자 정의 서버를 컴파일하는 것은 매우 쉽습니다.

그러나 유휴 연결을 좋아하지 않는 방화벽이나 게이트웨이로 인해 연결이 끊어 질 가능성이 훨씬 큽니다.

서버의 로그 파일에 액세스 할 수 있다면 좋은 실마리가 될 것입니다. 클라이언트가 서버가 예기치 않게 연결을 종료했다고 말하고 서버가 클라이언트가 연결을 예기치 않게 닫았다 고하면 실제로 클라이언트와 서버 사이에 연결이 끊어진 것일 수 있습니다.


확실히 커스텀 컴파일 된 서버가 아니며 apt-get의 정기적 인 것입니다. 더 많은 방화벽과 게이트웨이 리드를 더 자세히 설명해 주시겠습니까? 확인하고 수정하려면 어떻게해야합니까?
Andrzej Gis

-2

네 가능합니다. 몇 가지 연결 매개 변수를 설정해야합니다.

아래 링크를 참조하십시오. https://jdbc.postgresql.org/documentation/head/connect.html

loginTimeout connectTimeout 소켓 Timeout cancelSignalTimeout


2
이는 데이터베이스 연결의 클라이언트 측에 대한 설정이며 서버에서 클라이언트 연결을 끊도록 구성 할 수있는 설정이 아닙니다. OP는 서버 측 연결 시간 초과 설정을 찾고 있습니다.
존 일명 hot2use
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.