2010-01-30 38 views
9

PostgreSQL tiene 3 ajustes de mantenimiento de conexión para la gestión de conexiones caídas (en postgresql.conf):¿Cómo usar la configuración de tcp_keepalives en Postgresql?

tcp_keepalives_count
tcp_keepalives_idle
tcp_keepalives_interval

Por defecto estos son 0.

El comportamiento que me gustaría es para Postgresql para soltar las conexiones del cliente después de un período de tiempo, en caso de que el cliente pierda su conexión de red o se vaya a dormir.

actualmente estoy usando estos valores:

tcp_keepalives_count = 1
tcp_keepalives_idle = 60
tcp_keepalives_interval = 60

Me postulo PostgreSQL 8.4 en Mac OS X, pero no parecen tener cualquier efecto Mi prueba es que bloqueo una fila en una tabla (usando SELECCIONAR PARA ACTUALIZAR) y desconecto la estación de trabajo de la red. Pero en Postgresql todavía veo esa estación de trabajo sosteniendo el candado.

Esperaría que después de que haya pasado el tiempo (60 segundos en este caso) la conexión finalice y se desbloquee el bloqueo.

O estoy haciendo algo mal o estoy completamente mal entendiendo cómo se supone que funciona.

Algún consejo?

+0

Ninguno. Seguí pensando que tenía algo ... luego nada. – pestilence669

+0

Dejé el servidor encendido durante la noche y cuando registré el AM, se soltó el bloqueo. No sé exactamente cuánto tardó en terminar la conexión, pero obviamente no está viendo mi nueva configuración (y, sí, reinicié el servidor). –

Respuesta

9

Creo que se necesita para configurar el sistema operativo en su lugar. Cambiar los parámetros keepalive por programas aún no es ampliamente compatible. Esto debería ayudarlo:
Using TCP keepalive to Detect Network Errors

También sus parámetros se eligen mal. Si tcp_keepalives_count=1 funcionó, incluso un paquete keepalive perdido perderá su conexión. Y los paquetes individuales se pierden a menudo. Me gustaría usar lo siguiente en /etc/sysctl.conf en MacOSX/FreeBSD:
net.inet.tcp.keepidle = 60000
net.inet.tcp.keepintvl = 10000
OS luego dejar caer las conexiones en la mayoría de los 140 segundos (60 segundos de inactivo + 8 paquetes keepalive en intervalos de 10 segundos) después de perder la conectividad.

Cuestiones relacionadas