Problemas periódicos de Cloud SQL al conectar OperationalError: (2062, 'Error al abrir el socket de Cloud SQL con error: el punto final de transporte no está conectado')

Problemas periódicos de Cloud SQL al conectar OperationalError: (2062, 'Error al abrir el socket de Cloud SQL con error: el punto final de transporte no está conectado')

Periódicamente, los intentos de conexión al servidor MySQL de segunda generación reciben este error:

OperationalError: (2062, 'Cloud SQL socket open failed with error: Transport endpoint is not connected')

Esto persistirá durante aproximadamente 10 minutos y luego desaparecerá.

La única referencia a este error junto con Cloud SQL que pude encontrar es que puede estar relacionado con los límites de conexión (https://groups.google.com/d/msg/google-cloud-sql-discuss/sdeD17oDBOQ/wtTewl4-EgAJ) pero hay muy poco más que sucede con la instancia fuera de una tarea de TaskQueue, por lo que me parece poco probable que alcancemos incluso el límite de 12 por instancia (y definitivamente no el límite general de 4k).

El código que causa esta excepción usa la misma configuración de base de datos que el resto de la aplicación y simplemente intenta hacer SELECTuna fila por clave principal (es decir, una pequeña consulta).

En los registros de la base de datos hay muchas entradas del error de la siguiente manera.

[Note] Aborted connection 39643 to db: 'my_schema' user: 'root' host: 'cloudsqlproxy~<instance_ip>' (Got an error reading communication packets)

pero no estoy seguro de si están relacionados, ya que ocurren de manera bastante constante a lo largo del día y el error anterior solo ocurre en un momento determinado durante aproximadamente 10 minutos.

Esto solo comenzó después de actualizar a Cloud SQL de segunda generación.

¿Alguien más ha visto esto o sabe más información?

Respuesta1

Resulta que la fuente de esto fueron los límites de conexión como lo sugirió originalmente el chat de Grupos de Google vinculado en la pregunta.

El error apareció porque la API de Pipelines usa una aplicación web mientras que el resto de la aplicación usa Django. Dado que Django cierra las conexiones por nosotros, no había ningún código para manejarlo manualmente, pero esas rutas que pasaron por la aplicación web y accedieron a la base de datos (usando el código de conexión de Django) las dejaron abiertas, lo que finalmente hizo que se alcanzara el límite.

información relacionada