2010-01-14 32 views
23

¿Cómo detengo una consulta de mysql en ejecución mediante programación?Cómo detener una consulta de mysql en ejecución

El problema al que me enfrento es que una consulta se construye utilizando los datos proporcionados por el usuario, y en ocasiones puede llevar mucho tiempo ejecutarla (tablas grandes de 15 a 30 millones de filas). Deseo ofrecerle al usuario una opción de cancelación, pero no sé cómo detener la ejecución de mysql-query actualmente en ejecución.

La aplicación es un applet de Java-servlet: el usuario especifica los criterios en el applet que se pasa al servlet donde se crea una clase de manejador para manejar la solicitud. Esta clase de manejador es autónoma re connect - query - disconnect to mysql.

Dado este escenario, ¿cómo cancelo una ejecución de la consulta mysql?

+0

hacerlo con cuidado, si usted está matando a una consulta se bloqueará su mesa – VKGS

Respuesta

39
SHOW PROCESSLIST; 
KILL <thread_to_be_killed>; 

Consulte la documentación para obtener detalles adicionales

Show The Process List

Kill A Running Thread

+0

usando kill consulta es ligeramente preferible matar por este caso. De esta forma, la consulta se cancela, pero no la conexión ref # el comentario en "http://stackoverflow.com/questions/3787651/how-can-i-stop-a-running-mysql-query" –

0

Puede emitir comandos específicos de MySQL a través de las bibliotecas estándar proporcionados por MySQL y ejecutar KILL QUERY. Es posible que sea mejor enumerar los procesos y averiguar qué hilo necesita matar primero.

Dependiendo de su aplicación, esto podría crear un problema de seguridad (ya que debe otorgar más privilegios al usuario de la aplicación de conexión).

2

Se requiere una conexión JDBC separada, lo que significa que tendrá que crear una nueva instancia de controlador de base de datos. Ejecute la instrucción SHOW PROCESSLIST y luego recorra los resultados y ejecute una instrucción KILL para cada identificación de hilo encontrada para el usuario dado.

La única manera confiable en que puedo pensar es que cada usuario tenga que iniciar sesión en la base de datos con un nombre de usuario diferente, obtener todos los identificadores de subproceso para ese usuario y eliminar todos sus subprocesos.

Cuestiones relacionadas