Saltar al contenido

¿Cómo soluciono los problemas de anclaje de conexión en Amazon RDS Proxy?

7 minutos de lectura
0

Quiero solucionar problemas de anclaje de conexión cuando uso el proxy de Amazon Relational Database Services (Amazon RDS) para acceder a la base de datos de destino.

Resolución

Revisión de las métricas de CloudWatch

Sigue estos pasos:

  1. Abre la consola de Amazon CloudWatch.
  2. En el panel de navegación, elige Métricas y, a continuación, Todas las métricas.
  3. En la pestaña Examinar, elige RDS y, a continuación, Métricas por proxy.
  4. Busca la métrica DatabaseConnectionsCurrentlySessionPinned.

La métrica DatabaseConnectionsCurrentlySessionPinned muestra el número de conexiones a bases de datos que RDS Proxy ancla cada 60 segundos. Cuando las operaciones de la solicitud del cliente cambian el estado de la sesión, RDS Proxy ancla las conexiones.

Nota: La métrica DatabaseConnectionsCurrentlySessionPinned comienza a registrar cuando RDS Proxy detecta la primera conexión anclada y se detiene cuando la conexión anclada tiene valores NULL.

Revisión de los eventos de registro de RDS Proxy

Para obtener información detallada sobre las instrucciones SQL y las operaciones internas de RDS Proxy, modifica el proxy para activar el registro mejorado.

Nota: El registro mejorado se desactiva automáticamente después de 24 horas.

Para solucionar problemas de anclaje de conexión, revisa los eventos de registro de RDS Proxy.

Sigue estos pasos:

  1. Abre la consola de CloudWatch.
  2. En el panel de navegación, elige Registros y, a continuación, selecciona Grupos de registros.
  3. Selecciona el grupo de registros de tu proxy, como /aws/rds/proxy/name of your proxy.
  4. En la pestaña Secuencias de registro, selecciona la secuencia de registro para ver los eventos de registro.

Ejecución de consultas de Información de registros de CloudWatch para detectar anomalías

Para acceder al editor de consultas de Información de registros de CloudWatch, sigue estos pasos:

  1. Abre la consola de CloudWatch.
  2. En el panel de navegación, elige Registros y, a continuación, selecciona Información de registros.

Utiliza el editor de consultas para ejecutar las siguientes consultas. En cada consulta, sustituye proxy-name por tu nombre de proxy.

Para determinar el motivo por el que se ha anclado una conexión individual, ejecuta la siguiente consulta:

fields @message  
| sort @timestamp asc  
| filter @logStream like '{proxy-name}'  
| filter @message like /The client session was pinned to the database connection/

Para obtener las principales conexiones ancladas por recuento, ejecuta la siguiente consulta:

fields @message  
| sort @timestamp asc  
| filter @logStream like '{proxy-name}'  
| filter @message like /The client session was pinned to the database connection/  
| parse 'Reason: \\\*' as reason  
| stats count() as reasonCount by reason  
| sort by reasonCount desc  
| limit 20

Resolución de cambios de configuración de sesión

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Cuando la conexión del cliente cambia la configuración de las variables de nivel de sesión, RDS Proxy ancla la conexión porque no puede reutilizarla.

Si recibes el siguiente mensaje de error: 

"The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: SQL changed session settings that the proxy doesn't track. Consider moving session configuration to the proxy's initialization query."

Todas las conexiones a bases de datos deben tener la misma configuración. Para resolver este problema, agrega la configuración de consulta de inicialización al crear un proxy. Especifica las instrucciones SQL para que el proxy se ejecute cuando abra cada nueva conexión a la base de datos. Para modificar un proxy existente, puedes usar la consola de Amazon RDS o ejecutar el comando modify-db-proxy-target-group de la AWS CLI.

Importante: No agregues datos confidenciales, como contraseñas o claves de cifrado de larga duración, a la consulta de inicialización. Los métodos criptográficos o de autenticación no la protegen porque cualquier persona con acceso a la configuración del grupo de destino del proxy puede ver la consulta de inicialización. 

Por lo general, se usa la configuración de la consulta de inicialización con instrucciones SET para que cada conexión tenga una configuración idéntica. Para incluir varias variables en una sola instrucción SET, utiliza separadores de comas.

Por ejemplo, puedes ejecutar el siguiente comando para establecer una variable de zona horaria en la consulta de inicialización:

aws rds modify-db-proxy-target-group --target-group-name default --db-proxy-name proxy --connection-pool-config '{ > "InitQuery": "SET time_zone = \"+00:00\";" > }'

Nota: Sustituye proxy por el nombre de tu proxy.

Resolución de errores de instrucciones preparadas a nivel de protocolo y mensajes de análisis

Cuando bibliotecas específicas, como asyncpg/mysql.connector, utilizan internamente instrucciones preparadas a nivel de protocolo, recibirás uno de los siguientes mensajes de error: 

  • "The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: A parse message was detected."
  • "The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: A protocol-level prepared statement was detected."

Si el cliente usa las instrucciones preparadas, RDS Proxy ancla la conexión.

Para resolver este problema, cierra todas las conexiones que utilizan instrucciones preparadas después de que el proxy haya utilizado las conexiones de forma explícita.

Resolución de consultas SQL de gran tamaño

Es posible que se muestre el siguiente mensaje de error:

"The client session was pinned to the database connection [dbConnection=xxxx] for the remainder of the session. The proxy can't reuse this connection until the session ends. Reason: The connection ran a SQL query which exceeded the 16384 byte limit."

En todos los motores de bases de datos compatibles con RDS Proxy, RDS Proxy ancla una sesión cuando encuentra instrucciones SQL de más de 16 KB. Se recomienda reducir el tamaño de las instrucciones SQL. Por ejemplo, puedes eliminar comentarios o limitar el uso de alias.

Reducción de los anclajes de conexión

Para evitar solicitudes innecesarias a la base de datos que pueden hacer que el proxy ancle una conexión, toma las siguientes medidas:

  • Elimina las operaciones de base de datos que inician un anclaje de conexión.
  • Utiliza las operaciones por lotes para combinar las solicitudes relacionadas en una sola consulta.

Para estandarizar la configuración de conexión, realiza las siguientes acciones:

  • Mantén parámetros de configuración y variables coherentes en todas las conexiones para gestionar la reutilización a nivel de transacción.
  • En el caso de Amazon RDS para PostgreSQL, define las variables en el lado de la base de datos. Al configurar las variables en el lado del cliente, RDS Proxy ancla la conexión a la base de datos.
  • En el caso de las bases de datos de Amazon RDS para MySQL, utiliza filtros de anclaje de sesión para especificar las operaciones de base de datos que pueden evitar de forma segura los requisitos de anclaje de sesión.

Se recomienda mover las instrucciones SET comunes a la consulta de inicialización del proxy para lograr una inicialización idéntica en todas las conexiones y mantener la reutilización a nivel de transacción.

Información relacionada

Conceptos y terminología de RDS Proxy

Supervisión de las métricas de RDS Proxy con Amazon CloudWatch