2012-10-11 10 views
6

Tengo una tabla MySQL que utiliza el motor MyISAM con 6 columnas INT, 1 SMALLINT, 2 columnas TINYINT y 1 columna FLOAT. Tiene miles de millones de filas (el archivo de datos es de 100 GB). Intentaba indexar en todos de las columnas habilitando las teclas, pero eso nunca sucedió. Tratar "myisamchk -r nombreTabla" dio el siguiente error:reparación/indexación de tablas grandes y myisam_sort_buffer_size

- recovering (with sort) MyISAM-table 'tableName'        
Data records: 662929483               
- Fixing index 1                 
myisamchk: error: myisam_sort_buffer_size is too small       
MyISAM-table 'tableName' is not fixed because of errors       
Try fixing it by using the --safe-recover (-o), the --force (-f) option or by not using the --quick (-q) flag 

El uso de "demyisamchk -rov nombreTabla" en lugar lleva por siempre de nuevo (presumiblemente porque está utilizando el método keycache, no el método para ordenar).

¿No tiene sentido aumentar myisam_sort_buffer_size en este caso? (La respuesta a myisam_sort_buffer_size vs sort_buffer_size sugiere que aumentar el valor nunca tiene sentido). La máquina tiene 32 GB de RAM.

Respuesta

1

Si está procesando los datos de 100 GB sin conexión. Cree tablas de lotes dividiendo los datos en tablas separadas, cada uno tiene pocos millones de datos con la indexación adecuada y el motor de base de datos como innodb.

Si está utilizando esos datos en línea en una aplicación en tiempo real, consulte el siguiente enlace sobre la gestión de grandes volúmenes de datos. What database works well with 200+GB of data?

3

solo necesita aumentar el tamaño del búfer de clasificación para myisamchk.

myisamchk -r -q TABLE.MYI --sort_buffer_size=2G 

encontrado aquí: https://ma.ttias.be/mysql-myisamchk-error-myisam_sort_buffer_size-is-too-small/

+0

(lo ideal es?) El valor sort_buffer_size debe ser capaz de mantener el mayor índice de + algo de sobrecarga - no la suma de todos los índices, pero el tamaño de la más grande. He experimentado fallas de segmentación cuando el buffer no era lo suficientemente grande. – user3127882

Cuestiones relacionadas