2011-11-23 26 views
6

Tengo una consulta bastante lenta (en realidad esta es la carga de datos de mysql.dump). Ahora quiero verificar cuántas filas ya están cargadas.Pausa y reanudar la ejecución de la consulta de mysql

select count(*) from my_table; 

En cuanto a los datos está cargando, my_table está bloqueado, por lo que no se puede ejecutar esta sql antes de cargar volcado.

Cmd  ID State    User Host   DB  Time Query       
Query  191 update    root localhost  rehub 00:09 INSERT INTO `my_table` VALUES ... 
Query  189 Waiting for table root localhost  rehub 06:25 select count(*) from my_table 

Entonces, ¿hay una manera de hacer una pausa en la consulta 191, 189 ejecutar la consulta y luego retomar consulta 191?

+0

Supongo que puedes probar tu suerte en information_schame.tables? – ajreal

+0

Use Oracle, donde "los escritores nunca bloquean a los lectores";) –

+1

¿Es posible que cambie las opciones de volcado? Si es así, ¿usaste '-extended-insert'? Entonces un '-extended-insert = FALSE' podría ayudar, pero ralentizará la importación. –

Respuesta

4

No, no hay forma de suspender una consulta.

Si realiza un trabajo de carga masiva, es posible que desee utilizar un cargador masivo que realice cada pocas miles filas.

Además, el uso de MyISAM en lugar de InnoDB aliviará este problema. MyISAM es una buena opción para el procesamiento masivo en el que no se preocupa principalmente por la integridad transaccional.

0

Puede todavía obtener el número de registros insertados usando show innodb status

2

Citando el manual:

Todas las opciones que es sinónimo de --opt también son de forma predeterminada porque --opt está activado por defecto.

Así que cuando se agrega –-extended-insert=FALSE y --add-locks=FALSE a las opciones de su mysqldump select count (*) debería funcionar. Dependiendo de su situación, tenga cuidado con los problemas con la integridad referencial de su db. ¡Y ralentizará la importación!

Cuestiones relacionadas