MySQL: ¿puedo limitar el tiempo máximo permitido para que se ejecute una consulta?

Estoy buscando una manera de limitar el tiempo máximo de ejecución de una consulta en el servidor mysql. Pensé que esto podría hacerse a través del archivo de configuración my.cnf , pero no pude encontrar nada relevante en los documentos. ¿Alguien sabe si esto podría hacerse? Gracias.

No hay forma de especificar un tiempo de ejecución máximo al enviar una consulta al servidor para que se ejecute.

Sin embargo, no es raro tener un trabajo cron que se ejecute cada segundo en su servidor de base de datos, conectándose y haciendo algo como esto:

  1. MOSTRAR LISTA DE PROCESOS
  2. Encuentra todas las conexiones con un tiempo de consulta mayor que tu tiempo máximo deseado
  3. Ejecute KILL [id. De proceso] para cada uno de esos procesos

Puede usar una consulta de la siguiente manera:

 SELECT MAX_STATEMENT_TIME=1000 * FROM table; 

ACTUALIZACIÓN: Deberías usar max_execution_time en su lugar.

 SELECT /*+ MAX_EXECUTION_TIME(1000)*/ * FROM table; 

MAX_STATEMENT_TIME se renombró a max_execution_time en MySQL 5.7.8. http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_execution_time

Mientras tanto, el equipo de Twitter lanzó sus cambios a MySQL que implementa esto:

- Reduce unnecessary work through improved server-side statement timeout support. This allows the server to proactively cancel queries that run longer than a millisecond-granularity timeout.

Consulte http://engineering.twitter.com/2012/04/mysql-at-twitter.html y https://github.com/twitter/mysql/wiki/Statement-Timeout

http://mysqlserverteam.com/server-side-select-statement-timeouts/

Interesante actualización. Yo lo comprobare:

“MySQL 5.7.4 introduce la capacidad de establecer límites de tiempo de ejecución del lado del servidor, especificados en milisegundos, para sentencias SELECT de solo lectura de nivel superior”.

 SET GLOBAL MAX_STATEMENT_TIME=1000; SET SESSION MAX_STATEMENT_TIME=2000; SELECT MAX_STATEMENT_TIME=1000 * FROM table;