En esta página se proporcionan prácticas recomendadas y ejemplos de código específicos de cada lenguaje para ayudarte a crear aplicaciones que usen las conexiones de bases de datos de Cloud SQL de forma eficaz.
Estas muestras son fragmentos de una aplicación web completa que puedes consultar en GitHub. Más información
Para ver instrucciones detalladas sobre cómo ejecutar una aplicación web de ejemplo conectada a Cloud SQL, sigue el enlace correspondiente a tu entorno:
- Guía de inicio rápido para conectarse desde un ordenador local
- Guía de inicio rápido para conectarse desde Compute Engine
- Guía de inicio rápido para conectarse desde Cloud Run
- Guía de inicio rápido para conectarse desde Cloud Run Functions
- Guía de inicio rápido para conectarse desde Google Kubernetes Engine
Grupos de conexión
Un grupo de conexiones es una caché de conexiones de bases de datos que se comparten y reutilizan para mejorar la latencia y el rendimiento de las conexiones. Cuando tu aplicación necesita una conexión de base de datos, toma prestada una de su grupo temporalmente. Cuando la aplicación termina de usar la conexión, la devuelve al grupo, donde se puede reutilizar la próxima vez que la aplicación necesite una conexión de base de datos.
Abrir y cerrar conexiones
Cuando usas un grupo de conexiones, debes abrir y cerrar las conexiones correctamente para que siempre se devuelvan al grupo cuando hayas terminado de usarlas. Las conexiones que no se devuelven o que se "filtran" no se reutilizan, lo que supone un desperdicio de recursos y puede provocar cuellos de botella en el rendimiento de tu aplicación.
Python
Java
Node.js
C#
Go
Ruby
PHP
Número de conexiones
Cada conexión de base de datos usa recursos del lado del cliente y del lado del servidor. Además, Cloud SQL impone límites de conexión generales que no se pueden superar. Si creas y usas menos conexiones, se reduce la sobrecarga y puedes mantenerte por debajo del límite de conexiones.
Python
Java
Node.js
C#
Go
Ruby
PHP
Actualmente, PDO no ofrece ninguna función para configurar límites de conexión.
Tiempo de espera exponencial
Si tu aplicación intenta conectarse a la base de datos y no lo consigue, es posible que la base de datos no esté disponible temporalmente. En este caso, enviar solicitudes de conexión repetidas desperdicia recursos. Es preferible esperar antes de enviar solicitudes de conexión adicionales para permitir que se pueda volver a acceder a la base de datos. Para conseguirlo, se puede usar un tiempo de espera exponencial u otro mecanismo de retraso.
Este reintento solo tiene sentido cuando se conecta por primera vez o cuando se obtiene una conexión del grupo por primera vez. Si se producen errores durante una transacción, la aplicación debe volver a intentarlo desde el principio de la transacción. Por lo tanto, aunque tu grupo esté configurado correctamente, es posible que la aplicación siga mostrando errores si se pierden las conexiones.
Python
Java
Node.js
C#
Go
Actualmente, el paquete database/sql no ofrece ninguna función para configurar el retroceso exponencial.
Ruby
PHP
Actualmente, PDO no ofrece ninguna función para configurar la retirada exponencial.
Tiempo de espera agotado
Hay muchos motivos por los que un intento de conexión puede no tener éxito. La comunicación de red nunca está garantizada y es posible que la base de datos no pueda responder temporalmente. Asegúrate de que tu aplicación gestione correctamente las conexiones rotas o fallidas.
Python
Java
Node.js
C#
Go
Actualmente, el paquete database/sql no ofrece ninguna función para configurar el tiempo de espera de la conexión. El tiempo de espera se configura a nivel de controlador.
Ruby
PHP
Finalizar una conexión
Los usuarios con el privilegio PROCESS
en Cloud SQL pueden enumerar las conexiones que no gestionan. En MySQL 5.7.x, los usuarios deben tener el privilegio SUPER
y, en MySQL 8.0.x, deben tener el privilegio CONNECTION_ADMIN
para ejecutar una instrucción KILL
en estas conexiones. La instrucción KILL
finaliza la conexión de cualquier otro usuario de MySQL (excepto los usuarios administrativos de Cloud SQL). Los usuarios que no tengan estos privilegios solo podrán enumerar y finalizar las conexiones que gestionen.
Puedes enumerar las conexiones a una instancia con el cliente mysql y ejecutar el comando SHOW PROCESSLIST
. Usa Id
para finalizar la conexión.
Por ejemplo:
mysql> SHOW PROCESSLIST;
mysql> KILL 6;
Duración de la conexión
Limitar la duración de una conexión puede ayudar a evitar que se acumulen conexiones abandonadas. Puedes usar el grupo de conexiones para limitar la duración de las conexiones.
Python
Java
Node.js
Actualmente, la biblioteca de Node.js mysql no ofrece ninguna función para controlar la duración de una conexión.
C#
Go
Ruby
Actualmente, ActiveRecord no ofrece ninguna función para controlar la duración de una conexión.
PHP
Actualmente, PDO no ofrece ninguna función para controlar la duración de una conexión.
Ver la solicitud completa
Para ver la solicitud completa, haz clic en el enlace que aparece a continuación.
Python
Consulta la aplicación completa del lenguaje de programación Python.
Java
Consulta la aplicación completa del lenguaje de programación Java.
Node.js
Consulta la aplicación completa del lenguaje de programación Node.js.
C#
Consulta la aplicación completa del lenguaje de programación C#.
Go
Consulta la solicitud completa del lenguaje de programación Go.
Ruby
Consulta la aplicación completa del lenguaje de programación Ruby.
PHP
Consulta la aplicación completa del lenguaje de programación PHP.
Siguientes pasos
- Consulta más información sobre la IP privada.
- Consulta información sobre las cuotas y los límites de Cloud SQL y App Engine.
- Consulta las prácticas recomendadas para trabajar con Cloud SQL.
- Consulta más información sobre cómo conectarse desde una aplicación externa.