Gestión de conexiones de MySQL
Las conexiones con el despliegue de IBM Cloud® Databases for MySQL utilizan recursos, por lo que debe tener en cuenta cuántas conexiones necesita al ajustar el rendimiento del despliegue. MySQL utiliza un valor max_connections
para
limitar el número de conexiones (y recursos utilizados por las conexiones) para evitar que el comportamiento de las conexiones fuera de control agote los recursos del despliegue.
Puede comprobar el valor de max_connections
con el usuario administrativo y mysql
.
Compruebe max_connections
con el usuario admin
utilizando un mandato como:
ibmclouddb=> SHOW max_connections;
max_connections
-----------------
200
(1 row)
Cómo calcular la variable MySQL max_connections
max_connections
es un parámetro de configuración en MySQL que determina el número máximo de conexiones simultáneas que se pueden establecer con el servidor de bases de datos.
Fórmula básica de MySQL max_connections
La fórmula básica para calcular max_connections
es:
Available RAM = Global Buffers + (Thread Buffers x `max_connections`)
Para recuperar una lista de almacenamientos intermedios y sus valores, utilice un mandato como:
SHOW VARIABLES LIKE '%buffer%';
Límites de conexión de MySQL
Cuando se suministra, Databases for MySQL establece el número máximo de conexiones a la base de datos MySQL en 200. Aumente este valor Cambiando la configuración de MySQL.
Deje algunas conexiones disponibles, ya que algunas se reservan internamente para mantener el estado y la integridad de la base de datos.
Limite el número de conexiones simultáneas para cualquier cuenta no administrativa. Por ejemplo, el establecimiento de max_user_connections=3
restringe la cuenta de usuario a un máximo de tres conexiones simultáneas.
Si se supera el límite de conexiones para el despliegue, el estado de la base de datos se verá afectado negativamente y las aplicaciones no podrán alcanzarlo. Una vez alcanzado el límite de conexión, cualquier intento de iniciar una nueva conexión dará como resultado un error.
FATAL: remaining connection slots are reserved for
non-replication superuser connections
Acceda a información sobre las conexiones al despliegue con el usuario de admin
, mysql
y SHOW GLOBAL STATUS
.
mysql> SHOW GLOBAL STATUS;
+-----------------------------------+------------+
| Variable_name | Value |
+-----------------------------------+------------+
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| Bytes_received | 155372598 |
| Bytes_sent | 1176560426 |
...
| Connections | 30023 |
| Created_tmp_disk_tables | 0 |
| Created_tmp_files | 3 |
| Created_tmp_tables | 2 |
...
| Threads_created | 217 |
| Threads_running | 88 |
| Uptime | 1389872 |
+-----------------------------------+------------+
Para determinar hacia dónde van las conexiones, divida las conexiones por base de datos con la ayuda de la variable threads_connected
, utilizando un mandato como:
mysql> show status where `variable_name` = 'Threads_connected';
Para investigar más a fondo las conexiones, utilice el mandato SHOW PROCESSLIST
:
SHOW [FULL] PROCESSLIST;
Finalizando MySQL Connections
Cada conexión con mysqld, MySQL Server, se ejecuta en una hebra independiente y se puede detener con una sentencia processlist_id
, utilizando un
mandato como:
KILL [CONNECTION | QUERY] processlist_id
KILL CONNECTION
finaliza la conexión que está asociada con elprocesslist_id
, después de detener cualquier sentencia en la que se esté ejecutando la conexión.KILL QUERY
finaliza la sentencia en la que se ejecuta la conexión, pero deja intacta la propia conexión.
Para obtener más información, consulte la publicación MySQL Reference Manual KILL Statement.
Finalizar MySQL Connections
Si el despliegue alcanza el límite de conexiones o tiene problemas para conectarse al despliegue y sospecha que un gran número de conexiones es un problema, desconecte (o finalice) todas las conexiones al despliegue.
En la interfaz de usuario, en la pestaña Valores, hay un botón para End Connections
en el despliegue. Tenga cuidado, ya que interrumpe cualquier cosa que esté conectada al despliegue.
En la CLI, finalice las conexiones con el despliegue utilizando un mandato como:
ibmcloud cdb deployment-kill-connections <deployment name or CRN>
También puede utilizar la API de Cloud Databases para llevar a cabo la operación de finalizar todas las conexiones.
Agrupación de conexiones MySQL
Una manera de evitar que se supere el límite de conexiones y garantizar que las conexiones de las aplicaciones se gestionan de forma eficiente es a través de la agrupación de conexiones.
MySQL Conectores le permite conectar y ejecutar sentencias MySQL desde otro lenguaje o entorno, incluyendo instancias de ODBC, Java (JDBC), C++, Python, PHP, Perl, Rubyy C nativas e incorporadas de MySQL .
Por ejemplo, la agrupación de conexiones con MySQL Connector/J puede aumentar el rendimiento al tiempo que se reduce el uso general. MySQL Connector/Python también permite la optimización utilizando el módulo mysql.connector.pooling
.