Mejora de PostgreSQL 12: Entradas de registro benignas «Paquete de inicio incompleto»

Hay un millón menos de comentarios en PostgreSQL 12 que pueden reducir en gran medida las entradas de registro benignas. parche de estudio es probablemente uno de los más pequeños en PostgreSQL 12.

El mensaje de la comisión dice:

Este parche mejorará la experiencia de muchos usuarios comerciales al reducir las entradas de registro no deseadas. Es muy común ver que el archivo de registro de PostgreSQL se ejecuta en varios GB, principalmente debido a estas entradas benignas no deseadas.

Puedes leer el hilo de discusión completo en postgresql.org.

Descubrimiento

En PostgreSQL, para cada solicitud de conexión de cliente a Postmaster (escuche el puerto 5432 de forma predeterminada), se creará un proceso de back-end. Luego procesa el paquete de inicio del cliente. Referirse a
origen/back-end/maestro de correo/maestro de correo.C para el código fuente. Se espera que cada solicitud de conexión del cliente envíe un mensaje de inicio al servidor PostgreSQL, y esta información en el paquete de inicio se usa para establecer el proceso de back-end. Pero hay muchas más cosas que suceden cuando implementamos PostgreSQL en un centro de datos. Podrían ser varias soluciones de vigilancia, escáneres de seguridad, escáneres de puertos, soluciones HA, etc., conectadas al puerto 5432 de PostgreSQL. PostgreSQL comienza a procesar estas conexiones entrantes para establecer un canal de comunicación cliente-servidor. Pero muchas de estas herramientas pueden tener intenciones diferentes y no participar en un buen protocolo cliente-servidor. Históricamente, PostgreSQL genera una entrada de registro para cada uno de estos supuestos/malos éxitos. Esto puede provocar que los archivos de registro crezcan hasta un tamaño enorme y puede causar IO en relación con registros no deseados.

Aunque parezca una tontería, esto era tan molesto que muchos vendedores de herramientas comenzaron a documentarlo para sus clientes, aconsejándoles que ignoraran tales mensajes lo mejor que pudieran. mira aquí. Soluciones HA como Stolon informó un problema similar. Los complementos de monitoreo para Nagios, Cacti y Zabbix también causaron lo mismo y aparecieron en la lista de correo de PostgreSQL varias veces a lo largo de los años. Por ejemplo:

Reproducir el caso

Cualquier escáner de puerto o verificador de puerto TCP puede causar una entrada de registro. La utilidad ncat / nc tiene el modo Zero-I / O e informa solo el estado de la conexión (opción -z).

Esto produce entradas de LOG como las siguientes para la versión de PostgreSQL hasta la 11:

Pero en PostgreSQL 12, detecta que son paquetes de tamaño cero y simplemente los ignora. No habrá entradas en el archivo de registro.

Nota adicional

Desafortunadamente, algunas herramientas no son lo suficientemente suaves como para escribir un paquete de tamaño cero. En cuanto a la conciencia en la comunidad, esto debe registrarse.

Tom Lane explicó en la lista de correo:

Por lo tanto, deberíamos esperar ver este tipo de mensajes también en PostgreSQL 12. Podemos simular el problema usando telnet en lugar del comando nc para verificar el puerto abierto. Algunas otras herramientas terminan abruptamente las conexiones que causan errores en libpq (la biblioteca que implementa el protocolo de red PostgreSQL).

Tales entradas aún no se han ido. Esto sucede cuando el proceso del servidor intenta leer los paquetes (Consulte: función pq_recvbuf en src / backend / libpq / pqcomm.c) enviados por su lado del cliente y luego se da cuenta de que el lado del cliente ya está perdido. Lo que significa que el cliente ha terminado la comunicación sin un buen apretón de manos.

Sin embargo, habrá un nivel de ahorro. Algunas herramientas como nmap se utilizan para producir un error de libpq y un error de paquete de tamaño cero en PostgreSQL 11 como se muestra a continuación:

En PostgreSQL12 este par de errores se reducirá a uno como:
pudo No recibir datos cliente: Conexión Reiniciar incluso

última palabra

Muchas herramientas utilizadas en los centros de datos están sujetas a mejoras para una mejor compatibilidad con PostgreSQL. Como mencioné en mi publicación de blog anterior, Configurar HAProxy con PostgreSQL usando pgsql-check integrado y reciente mejoras a HAProxy como este compromiso mejorar la desconexión de pgsql-check. Entonces los mensajes como REGISTRO: No se pudieron recibir datos del cliente: restablecer la conexión desde el par ya no puede estar en los registros.

Cuando alguien quiere transmitir un archivo de registro muy grande con muchas de estas entradas benignas para cualquier propósito, incluido el soporte externo, puede valer la pena eliminar estas entradas del archivo de registro antes de transmitir/compartir. Por ejemplo, un simple pero siguiente comando podría eliminar todas las entradas de registro relacionadas con el paquete de inicio:

Un archivo de registro de PostgreSQL menos inflado podría ser un beneficio adicional al actualizar a PostgreSQL 12, que es una razón más para hacerlo.

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario