Saltar al contenido

¿Se agota el tiempo de espera del cliente, mientras que la consulta de MySQL sigue ejecutándose?

Recuerda que en las ciencias informáticas cualquier problema puede tener varias resoluciones, de igual modo nosotros aquí compartimos lo más óptimo y mejor.

Solución:

Debe ver qué valores predeterminados existen para los tiempos de espera:

mysql> show variables like '%timeout';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| connect_timeout            | 10    |
| delayed_insert_timeout     | 300   |
| innodb_lock_wait_timeout   | 50    |
| innodb_rollback_on_timeout | OFF   |
| interactive_timeout        | 60    |
| net_read_timeout           | 30    |
| net_write_timeout          | 60    |
| slave_net_timeout          | 3600  |
| table_lock_wait_timeout    | 50    |
| wait_timeout               | 60    |
+----------------------------+-------+
10 rows in set (0.00 sec)

Por lo general, observo varias variables de tiempo de espera. Esto es muy imperativo si usa MySQL de forma remota desde MySQL Workbench, cliente mysql o aplicación PHP en un servidor de aplicaciones que se comunica con MySQL en un servidor de base de datos.

Esto es lo que dice la documentación de MySQL sobre estas configuraciones:

  • wait_timeout (Predeterminado 28800 [8 hours]) : el número de segundos que el servidor espera actividad en una conexión no interactiva antes de cerrarla. Este tiempo de espera se aplica solo a las conexiones de archivos de socket TCP/IP y Unix, no a las conexiones realizadas mediante canalizaciones con nombre o memoria compartida. En el inicio del subproceso, el valor de espera_tiempo de espera de la sesión se inicializa desde el valor global de espera_tiempo de espera o desde el valor global de tiempo de espera interactivo, según el tipo de cliente (como lo define la opción de conexión CLIENT_INTERACTIVE para mysql_real_connect()). Ver también interactive_timeout.
  • interactive_timeout (Predeterminado 28800 [8 hours]) : el número de segundos que el servidor espera actividad en una conexión interactiva antes de cerrarla. Un cliente interactivo se define como un cliente que usa la opción CLIENT_INTERACTIVE para mysql_real_connect(). Véase también wait_timeout.
  • net_read_timeout (predeterminado 30): la cantidad de segundos para esperar más datos de una conexión antes de cancelar la lectura. Cuando el servidor está leyendo del cliente, net_read_timeout es el valor de tiempo de espera que controla cuándo abortar. Cuando el servidor está escribiendo en el cliente, net_write_timeout es el valor de tiempo de espera que controla cuándo cancelar. Véase también slave_net_timeout.
  • net_write_timeout (predeterminado 60): la cantidad de segundos que se esperará para que se escriba un bloque en una conexión antes de cancelar la escritura. Véase también net_read_timeout.

Asegúrese de que estos tiempos de espera sean lo suficientemente altos para acomodar las consultas que pueden ejecutarse durante mucho tiempo, que pueden incluir:

  • Masa UPDATEs
  • Masa DELETEs
  • ENABLE KEYS en un MyISAM grande

Para manejar las consultas que continúan ejecutándose después de perder el contacto con ellas, debe ejecutar MATAR contra el ID de proceso de la consulta de ejecución prolongada. Incluso con el comando KILL, tendrá que esperar cualquier consulta que se encuentre en medio de pasos de uso intensivo del disco o que tenga mutex internos en curso.

Agradecemos que quieras añadir valor a nuestro contenido dando tu veteranía en las observaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *