¿Es posible limitar el tiempo de espera en el servidor Postgres?


16

Configuré la conexión y el tiempo de espera del comando en 10 minutos en mi aplicación (lado del cliente).

Que mi aplicación ejecuta una consulta simple: SELECT pg_sleep(65)

En algunos servidores funciona bien, pero otros servidores cierran la conexión después de 60 segundos.

¿Podría ser algún tipo de configuración del servidor PostgreSQL que limite los tiempos de espera e ignore la configuración de mi cliente?


Para ver el tiempo de espera actual:SHOW statement_timeout;
Usuario

Respuestas:


26

Si es posible

Hay dos configuraciones mencionadas en los documentos ( idle_in_transaction_session_timeoutes nuevo en la versión 9.6x)

  • statement_timeout (entero)

    Anule cualquier declaración que tome más del número especificado de milisegundos, comenzando desde el momento en que el comando llega al servidor desde el cliente. Si log_min_error_statement se establece en ERROR o inferior, la declaración que expiró también se registrará. Un valor de cero (el valor predeterminado) lo desactiva.

    No se recomienda establecer la declaración de tiempo de espera en postgresql.conf porque afectaría a todas las sesiones.

  • idle_in_transaction_session_timeout (entero)

    Termine cualquier sesión con una transacción abierta que haya estado inactiva durante más tiempo que la duración especificada en milisegundos. Esto permite que se liberen todos los bloqueos mantenidos por esa sesión y se reutilice la ranura de conexión; también permite que las tuplas visibles solo para esta transacción se aspiren. Vea la Sección 24.1 para más detalles sobre esto.

    El valor predeterminado de 0 deshabilita esta función.

Es importante no configurarlo statement_timeouten postgresql.conf a menos que desee diversión.

Aquí hay un ejemplo de que funciona

SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR:  canceling statement due to statement timeout

Ninguna configuración está presente en el archivo de configuración, por lo que estoy usando valores predeterminados. :( ¿Alguna otra idea?
Andrzej Gis

@gisek seguro, podría ser algo a nivel de red, ya sea en su pila de IP local o en el firewall.
Evan Carroll

4

No fuera de la caja. Sin embargo, sería bastante fácil compilar un servidor personalizado que ignorara su configuración.

Pero es mucho más probable que sus conexiones estén cortadas por un firewall o puerta de enlace que no le gustan las conexiones inactivas.

Si tiene acceso al archivo de registro del servidor, eso debería ser una buena pista. Si el cliente dice que el servidor cerró la conexión inesperadamente, y el servidor dice que el cliente cerró la conexión inesperadamente, entonces es probable que haya algo entre el cliente y el servidor que está cortando la conexión.


Definitivamente no es un servidor compilado personalizado, solo cosas normales de apt-get. ¿Podría por favor elaborar más sobre el firewall y los cables de la puerta de enlace? ¿Cómo puedo verificarlo y arreglarlo?
Andrzej Gis

-2

Sí, es posible. Hay algunos parámetros de conexión que debe configurar.

Por favor, consulte el siguiente enlace. https://jdbc.postgresql.org/documentation/head/connect.html

loginTimeout connectTimeout socketTimeout cancelSignalTimeout


2
Estas son configuraciones para el lado del cliente de una conexión de base de datos y no configuraciones que se pueden configurar en el servidor para desconectar a un cliente. OP está buscando configuraciones de tiempo de espera de conexión del lado del servidor.
John aka hot2use
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.