¿Cómo puedo obtener los mensajes de estado durante una gran operación de volver a clasificar con MySQL 5.5?

dba.stackexchange https://dba.stackexchange.com/questions/3200

  •  16-10-2019
  •  | 
  •  

Pregunta

consigo grandes transferencias de datos periódicamente que he usado para reemplazar por completo el contenido de una tabla de MySQL. Cada vez que hago esto, yo truncar la tabla, llaves deshabilitar, añadir varios millones de filas de datos, a continuación, active las teclas. Como era de esperar, una vez que se habilita teclas, hay una larga demora, mientras que la tabla está siendo re-indexada. La tabla tiene varios índices activos y se tarda aproximadamente 30 minutos en completarse.

Por desgracia, no puedo encontrar la manera de obtener los mensajes de estado que darían a mí progresar actualizaciones sobre cómo está llevando a cabo la operación. encontré un hilo de edad a partir de 2001 en el foro de MySQL, que básicamente dice que no se puede conseguir progresar actualizaciones .

Tenía la esperanza de que ya no era el caso. Estoy funcionando con el servidor MySQL 5.5 y MySQL Workbench 5.2, ambas ediciones de la comunidad. Tal vez hay algo que puedo hacer con el banco de trabajo?

pregunta al margen: Actualmente, hago mis actualizaciones de un programa de Windows que analiza secuencialmente el archivo de datos de transferencia en declaraciones SQL INSERT que de inmediato su expedición al cliente de MySQL a través de una toma de corriente. ¿Sería más rápido para generar todos los comandos INSERT a un archivo y luego hacer una importación masiva mediante la ejecución de la secuencia de comandos SQL desde Workbench lugar?

- roschler

¿Fue útil?

Solución

Es necesario vigilar que el progreso fuera de todos los programas cliente de MySQL .

En este ejemplo, digamos que su tabla MyISAM es nombrado workingSet en el misdatos base de datos y la datadir es el valor predeterminado, / var / lib / mysql

Nota al margen: Si está utilizando Windows, ejecute este comando SQL para obtener datadir

SHOW VARIABLES LIKE 'datadir';

tendrá tres archivos que representan la tabla

/var/lib/mysql/mydata/workingset.frm
/var/lib/mysql/mydata/workingset.MYD
/var/lib/mysql/mydata/workingset.MYI

Pruebe con un enfoque de tabla temporal para cargar la tabla workingSet

use mydata
DROP TABLE IF EXIST workingsetload;
CREATE TABLE workingsetload LIKE workingset;
ALTER TABLE workingsetload DISABLE KEYS;
Perform 7 million row insert into workingsetload here, preferably LOAD DATA INFILE
ALTER TABLE workingsetload ENABLE KEYS;
ALTER TABLE workingset RENAME workingsetold;
ALTER TABLE workingsetload RENAME workingset;
DROP TABLE workingsetold;

Durante la carga de la workingsetload tabla, habrá una tabla temporal cuyos primeros cinco (5) caracteres son "# sql-". Puede controlar visualmente en el sistema operativo Linux, el progreso de la carga de workingsetload como esto:

cd /var/lib/mysql/mydata
watch -n 1 "ls -l workingsetload.MY[ID] *sql-*.MY[ID] | awk '{print $5,$9}'"

Usted podría script de esto en Linux como esto:

cd /var/lib/mysql/mydata
ls -l workingsetload.MY[ID] *sql-*.MY[ID] | awk '{print $5,$9}' > /tmp/IndexRebuild.txt

A continuación, podría analizar las columnas en consecuencia y restar los tamaños .MYD saber cuando la parte de datos de la tabla MyISAM es completa. Posteriormente, se puede analizar a continuación las columnas en consecuencia y restar los tamaños .MYI saber cuando la parte de índice de la tabla MyISAM es completa.

Para Windows, usted podría script de esta usando Perl (ActivePerl para Windows) o simplemente tener un bucle por lotes de DOS una y otra vez.

Independientemente del sistema operativo, una vez que los "ls -l #sql -. * MI [ID]" o "si no existe #sql -. * MI *". Regresa con nada, la recarga y la indexación se completa

darle una oportunidad !!!

ACTUALIZACIÓN 2011-07-20 16:55 EDT

Monty ha aplicado con éxito esta función en MariaDB. Compruébelo usted mismo !!!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top