2011-02-18 9 views
7

Tengo una consulta MySQL que está copiando datos de una tabla a otra para su procesamiento. Por alguna razón, esta consulta que normalmente toma unos segundos se bloquea durante la noche y se ejecuta durante varias horas. Cuando me conecté esta mañana, traté de eliminar la consulta, pero todavía aparece en la lista de procesos.La consulta MySQL no se va después de ser asesinada

| Id  | User  | Host  | db | Command | Time | State  | Info                     | 
+---------+----------+-----------+------+---------+-------+--------------+--------------------------------------------------------------------------------------+ 
| 1061763 | tb_admin | localhost | dw | Killed | 45299 | Sending data | INSERT INTO email_data_inno_stage SELECT * FROM email_data_test LIMIT 4480000, 10000 | 
| 1062614 | tb_admin | localhost | dw | Killed | 863 | Sending data | INSERT INTO email_data_inno_stage SELECT * FROM email_data_test LIMIT 4480000, 10000 | 

¿Qué podría haber causado esto, y cómo puedo matar este proceso para poder continuar con mi trabajo?

+0

Rebote MySQL sería aclarar eso, si quieres ir a la opción nuclear. –

Respuesta

3

Si la tabla email_data_test es MyISAM y estaba bloqueada, eso hubiera detenido el INSERT.

Si la tabla email_data_test es InnoDB, entonces se escribieron muchos datos de MVCC en ib_logfiles, que pueden no haberse producido aún.

En ambos casos, tenía la cláusula LIMIT desplazarse a través de 4.480.000 filas para llegar a las 10.000 filas que realmente necesitaba INSERTAR.

Al eliminar la consulta, solo la tabla InnoDB email_data_inno_stage ejecuta una reversión.

+0

Gracias. La mesa es innodb. Sé que esta podría no ser una forma ideal de hacerlo, pero si procesara toda la tabla de 70 millones de registros de la tabla email_data_test, llevaría una eternidad, si la base de datos podría manejarla, así que lo hice como lotes de 10k registros. – Wige

Cuestiones relacionadas