sleeping - mysql wait_timeout
Terminando conexiones mysql inactivas (2)
Veo que muchas conexiones están abiertas y permanecen inactivas durante mucho tiempo, digamos 5 minutos.
¿Hay alguna solución para finalizar / cerrarlo desde el servidor sin reiniciar el servicio mysql?
Estoy manteniendo un sistema PHP heredado y no puedo cerrar las conexiones que están establecidas para ejecutar la consulta.
¿Debo reducir los valores de tiempo de espera en el archivo my.cnf por defecto a 8 horas?
# default 28800 seconds
interactive_timeout=60
wait_timeout=60
Limpieza manual:
Puedes matar el processid.
mysql> show full processlist;
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+
| 1193777 | TestUser12 | 192.168.1.11:3775 | www | Sleep | 25946 | | NULL |
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+
mysql> kill 1193777;
Pero:
- la aplicación php puede reportar errores (o el servidor web, verifique los registros de errores)
- no arregles lo que no está roto : si no tienes conexiones cortas, déjalas.
Servicio de limpieza automática;)
O configura su servidor mysql configurando un tiempo de espera más corto en wait_timeout
y interactive_timeout
mysql> show variables like "%timeout%";
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| connect_timeout | 5 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| interactive_timeout | 28800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 |
| wait_timeout | 28800 |
+--------------------------+-------+
9 rows in set (0.00 sec)
Colocado con:
set global wait_timeout=3;
set global interactive_timeout=3;
(y también establecido en su archivo de configuración, para cuando se reinicia su servidor)
Pero está tratando los síntomas en lugar de la causa subyacente: ¿por qué están abiertas las conexiones? Si el script PHP terminó, ¿no deberían cerrarse? Asegúrese de que su servidor web no esté utilizando la agrupación de conexiones ...
No veo ningún problema, a menos que no los gestione utilizando un grupo de conexiones.
Si usa un grupo de conexiones, estas conexiones se reutilizarán en lugar de iniciar nuevas conexiones. así que, básicamente, dejar conexiones abiertas y volver a usarlas es menos problemático que volver a crearlas cada vez.