Cómo matar conexiones inactivas en PostgreSQL

Cómo matar conexiones inactivas en PostgreSQL

El primer paso para hacer cambios o leer información de un banco de datos PostgreSQL es establecer conexiones. Por otro lado, cada enlace generó una sobrecarga utilizando el procedimiento y el almacenamiento. Es por eso que un dispositivo con recursos mínimos (lectura, almacenamiento, hardware) puede admitir el agregado limitado de las conexiones. Una vez que el agregado limitado ha ido mucho más allá de un punto, debe continuar lanzando errores o negando las conexiones. Dentro de PostgreSQL.conf, PostgreSQL está haciendo un trabajo decente al limitar los enlaces. En este tutorial, veremos las diferentes formas de estados que los enlaces PostgreSQL pueden tener. Le mostraremos cómo determinar si el enlace está activo o ha estado inactivo durante una larga duración, en el que se puede desconectar para liberar los enlaces y los recursos.

Conectar al servidor:

Al comienzo, asegúrese de que PGADmin4 haya sido completamente funcional instalado en su sistema informático. Ábrelo desde sus aplicaciones. Debe conectarlo con el localhost proporcionando una contraseña.

Después de la conectividad con root localhost, conéctelo con el servidor PostgreSQL. Escriba la contraseña para el PostgreSQL 13 Postgres para conectarse. Toque el botón Aceptar para continuar.

Ahora se ha conectado al servidor PostgreSQL 13. Puede ver una lista de bases de datos que residen en el servidor como se presenta en la imagen que se adjunta a continuación. La base de datos de Postgres es la base de datos predeterminada 'creada en el momento de la instalación de PostgreSQL, mientras que la base de datos' Test 'ha sido creada por un usuario después de la instalación.

Los estados de conexión:

Si se establece un enlace PostgreSQL, puede realizar varias acciones que dan como resultado transiciones estatales. Se debe tomar una decisión racional sobre si el enlace está funcionando o si se ha dejado inactivo/no utilizado según el estado y la duración que ha sido en cada estado. Es importante tener en cuenta que hasta que la aplicación cierre deliberadamente la conexión, seguirá operando, desperdiciando recursos mucho después de que el cliente esté separado. Existen los 4 estados potenciales para una conexión:

  • Activo: Esto significa que el enlace está en funcionamiento.
  • Inactivo: Esto significa que el enlace está inactivo, por lo que debemos mantener un registro de ellos dependiendo de cuánto tiempo hayan estado inactivos.
  • Inactivo (en transacción): Esto significa que el backend se dedica a una consulta, aunque en realidad está inactivo y tal vez espere la entrada del cliente final.
  • Inactivo en transacción (abortado): Esta condición es equivalente al inactividad en el proceso. Sin embargo, una de las declaraciones culminó en un error. Se puede rastrear dependiendo de cuánto tiempo haya estado inactivo.

Identificar los estados de conexión:

Las tablas de catálogo PostgreSQL proporcionan una vista incorporada 'PG_STAT_ACTIVITY' para verificar las estadísticas sobre lo que hace un enlace o cuánto tiempo ha pasado en esta condición. Para verificar todas las estadísticas sobre cada base de datos y cada estado de conexión, abra la herramienta de consulta y ejecute la consulta a continuación:

>> seleccionar * de PG_STAT_ACTIVIA;

La consulta se ha implementado fructíferamente y se ha demostrado la nota de logro.

Cuando verifique su lado de salida de datos, encontrará una tabla con varias columnas, como se muestra a continuación. Puede verificar los estados de las conexiones verificando los valores del campo 'estado'.

Para simplificar la salida y tener una idea clara de las conexiones, sus estados, los usuarios y los servidores en esos estados, debe ejecutar la consulta modificada a continuación en la herramienta de consulta. Esta consulta solo muestra los 5 campos de registros de conexiones y datos particulares sobre ellos. La columna 'PID' significa ID de proceso. La columna 'estado' posee los estados de los procesos. La columna 'Usename' identifica al usuario que ha estado trabajando en el proceso particular. La columna 'datname' especificó el nombre de la base de datos en el que la transacción ha estado ejecutando. La columna 'dataD' significa ID de base de datos.

>> seleccione PID, Estado, Usename DatName, DataD, de PG_STAT_ACTIVITY;

La salida tiene un total de 8 procesos registrados. La columna 'estado' muestra que solo hay 3 procesos funcionando en este momento. Uno se mantiene por base de datos predeterminada 'Postgres y los otros dos se mantienen en la base de datos' prueba '. Al mismo tiempo, el usuario de Postgres ha estado realizando estos procesos.

Identificar las conexiones inactivas:

El "estado" parece ser el único valor que estamos buscando dentro de los resultados mencionados anteriormente. Utilizaremos esta información para determinar qué procesos o consultas se encuentran en qué estados y luego profundizar. Podemos adelgazar los detalles que estamos buscando refinando la consulta, lo que nos permite preparar una intervención en esa conexión específica. Podríamos hacer esto eligiendo solo los PID inactivos usando la cláusula WHERE y los estados para esos PID. También debemos realizar un seguimiento de cuánto tiempo el enlace ha estado inactivo y asegurarnos de que no tengamos ningún enlace descuidado que excluja nuestros recursos. Como resultado, utilizaremos el comando a continuación para mostrar solo registros relevantes para los procesos que actualmente están inactivos:

>> seleccione PID, Usename, UssySid, Datid, Datname, Application_Name, Backend_Start, State_Change, State desde PG_STAT_ACTIVITY WHERE state = 'Idle';

La consulta ha obtenido solo 2 registros de datos donde el estado estaba 'inactivo' utilizando la cláusula WHERE. El resultado muestra los 2 procesos inactivos con cierta información al respecto.

Mata una conexión inactiva:

Después de la identificación de conexiones inactivas, ahora un momento para matarlas. Una vez que hemos reducido el proceso en un estado de retención o inactivo durante mucho más tiempo, podríamos usar el comando simple para terminar fácilmente el mecanismo de fondo sin interrumpir las actividades del servidor. Tenemos que proporcionar el proceso 'ID' dentro de la consulta en una función de terminación.

>> seleccione PG_MINTINATION_BACKEND (7408);

El proceso ha sido asesinado magníficamente.

Ahora verifique las conexiones inactivas restantes de la consulta a continuación.

>> Seleccione Datid, Usename, DatName, PID, State de PG_STAT_ACTIVITY WHERE STATE = 'Idle';

La salida muestra solo 1 proceso restante, que está inactivo.

Conclusión:

Asegúrese de no perderse ningún paso para matar las conexiones inactivas de la base de datos PostgreSQL de manera eficiente.