Pregunta

He creado un nuevo índice en una tabla con los 35 millones de registros y su estado funcionando durante casi un 1 día de estos. Anteriormente cuando creé índices tardó 20 minutos, hay columnas fueron embargo flotadores. El nuevo idnex está en una varchar (45)

I utiliza el comando processlist que muestra la creación de índices todavía está en marcha con la siguiente salida

65417 | Repair with keycache | CREATE INDEX insert_index on checkins(dateinserted)

Me preguntaba si alguien me podría dar consejos sobre cómo encontrar a cabo si la consulta es en realidad muertos y está sentado en la lista de procesos. Tal vez algo ha ido mal tiene en algún momento y no estoy al tanto.

Gracias

¿Fue útil?

Solución

Su índice está construyendo, pero muy lentamente.

MySQL tiene dos métodos disponibles para la construcción de índices:

  1. por la clasificación. Este es el método más rápido, pero utiliza una gran cantidad de memoria.
  2. por keycache. Lento, lento, lento -. Pero utiliza poca memoria

El método keycache es un poco como la ordenación por inserción: los valores se insertan en el índice a la vez. Este es el mismo método utilizado por el servidor cuando se utiliza la instrucción INSERT para añadir filas a la tabla.

El método de clasificación ordena todos los valores utilizando la clasificación rápida, y luego se construye el índice de eso. Es muy rápido, pero requiere una gran cantidad de memoria y espacio en disco temporal.

Algunas variables de servidor puede aumentar el espacio disponible para el método de clasificación, y así permitir que el trabajo con tablas más grandes. Ver myisam_max_sort_file_size

http: //dev.mysql. com / doc / RefMan / 5.1 / es / servidor del sistema-variables.html # sysvar_myisam_max_sort_file_size

En Linux, se puede seguir el progreso de la reparación índice controlando el tamaño de los archivos temporales que se utilizan para construir el índice. El siguiente comando lista de todos los archivos que mantiene abierto el proceso de MySQL:

sudo ls -l /proc/[mysql-pid]/fd  

A continuación, echa un vistazo al tamaño de los hashes con en su nombre -. Estos son los archivos temporales

Otros consejos

Tenga en cuenta el tamaño del índice será 35M * 45 por lo menos. Si se trata de una columna utf8 entonces será 35M * 45 * 3. Eso es más de 4 gigas! Si usted no tiene un montón de memoria RAM para el apoyo que va a tener que hacer un montón de acceso a disco y realmente matar a rendimiento.

¿Se puede normalizar esta columna a cabo en otra tabla?

Si no lo hacen los valores tienden a variar con la suficiente decir que los primeros 8 caracteres? Usted puede ser capaz de salirse con sólo la indexación de los primeros 8 a continuación.

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