En esta página, se proporcionan prácticas recomendadas y muestras de código de lenguaje específico para ayudarte a crear aplicaciones que usan conexiones con la base de datos de Cloud SQL de manera eficiente.
Estas muestras son extractos de una aplicación web completa disponible para ti en GitHub. Obtén más información.
Para obtener instrucciones paso a paso sobre cómo ejecutar una aplicación web de muestra conectada a Cloud SQL, sigue el vínculo que corresponde a tu entorno:
- Guía de inicio rápido para conectarse desde una computadora 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 funciones de Cloud Run
- Guía de inicio rápido para conectarse desde Google Kubernetes Engine
Grupos de conexiones
Un grupo de conexiones es una caché de conexiones con la base de datos que se comparten y reutilizan para mejorar la latencia y el rendimiento de la conexión. Cuando la aplicación necesita una conexión con la base de datos, toma una prestada del grupo de manera temporal; cuando la aplicación ya no usa la conexión, la devuelve al grupo para reutilizarla la próxima vez que la aplicación necesite una conexión con la base de datos.
Abre y cierra conexiones
Cuando usas un grupo de conexiones, debes abrir y cerrar las conexiones de forma correcta, de modo que tus conexiones siempre vuelvan al grupo cuando hayas terminado con ellas. Las conexiones que no se devuelvan o que se “filtren” no se podrán volver a usar, lo que lleva a la pérdida de recursos y puede provocar cuellos de botella de rendimiento en la aplicación.
Python
Java
Node.js
C#
Go
Ruby
PHP
Conteo de conexiones
Cada conexión con la base de datos utiliza recursos de cliente y servidor. Además, Cloud SQL impone límites de conexión que no se pueden exceder. Mediante la creación y el uso de menos conexiones se reduce la sobrecarga y esto te ayuda a no superar el límite de conexiones.
Python
Java
Node.js
C#
Go
Ruby
PHP
Por el momento, PDO no ofrece ninguna función para configurar los límites de conexión.
Retirada exponencial
Si la aplicación intenta conectarse con la base de datos y no lo logra, es posible que la base de datos no esté disponible temporalmente. En este caso, el envío de solicitudes de conexión repetidas desperdicia recursos. Es preferible esperar antes de enviar solicitudes de conexión adicionales para permitir que se pueda acceder a la base de datos de nuevo. El uso de una retirada exponencial o de otro mecanismo de retraso logra este objetivo.
Este reintento solo tiene sentido cuando te conectas o tomas una conexión del grupo por primera vez. Si se producen errores en el medio de una transacción, la aplicación debe volver a intentarla desde el comienzo. Por lo tanto, incluso si el grupo está configurado de forma correcta, es posible que la aplicación detecte errores si se pierden las conexiones.
Python
Java
Node.js
C#
Go
Por el momento, el paquete database/sql no ofrece ninguna función para configurar la retirada exponencial.
Ruby
PHP
Por el momento, PDO no ofrece ninguna función para configurar la retirada exponencial.
Tiempo de espera de la conexión
Existen diferentes razones por las cuales un intento de conexión puede fallar. La comunicación con la red nunca se garantiza, y es posible que la base de datos no esté disponible temporalmente para responder. Asegúrate de que la aplicación gestione las conexiones dañadas o que no funcionan con facilidad.
Python
Java
Node.js
C#
Go
Por el momento, 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
Finaliza una conexión
Los usuarios con el privilegio PROCESS
en Cloud SQL pueden enumerar las conexiones que
no administran. 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
declaración KILL
en estas conexiones. La declaración KILL
finaliza la
conexión de cualquier otro usuario de MySQL (excepto los usuarios administrativos
de Cloud SQL). Los usuarios sin estos privilegios solo pueden enumerar y finalizar las conexiones
que administran.
Puedes generar una lista de las conexiones a una instancia mediante el cliente MySQL si ejecutas el comando SHOW PROCESSLIST
. Usa el Id
para finalizar la conexión.
Por ejemplo:
mysql> SHOW PROCESSLIST;
mysql> KILL 6;
Duración de la conexión
Poner un límite al tiempo de actividad de conexión puede ayudar a evitar que se acumulen conexiones abandonadas. Puedes usar el grupo de conexiones para limitar el tiempo de actividad de la conexión.
Python
Java
Node.js
Por el momento, la biblioteca “mysql” de Node.js no ofrece ninguna función para controlar la duración de una conexión.
C#
Go
Ruby
Por el momento, ActiveRecord no ofrece ninguna función para controlar la duración de una conexión.
PHP
Por el momento, PDO no ofrece ninguna función para controlar la duración de una conexión.
Visualiza la aplicación completa
Para ver la aplicación completa, haz clic en el siguiente vínculo.
Python
Ver la aplicación completa para el lenguaje de programación Python.
Java
Ve la aplicación completa para el lenguaje de programación Java.
Node.js
Ve la aplicación completa para el lenguaje de programación Node.js.
C#
Ve la solicitud completa para el lenguaje de programación C#.
Go
Visualiza la aplicación completa para el lenguaje de programación Go.
Ruby
Visualiza la aplicación completa para el lenguaje de programación Ruby.
PHP
Visualiza la aplicación completa para el lenguaje de programación PHP.
¿Qué sigue?
- Obtén más información sobre IP privada.
- Obtén más información sobre las cuotas y límites de Cloud SQL y App Engine.
- Obtén más información sobre las prácticas recomendadas para trabajar con Cloud SQL.
- Obtén más información sobre cómo conectarse desde una aplicación externa.