2012-10-11 12 views
6

Ho una tabella MySQL che utilizza il motore MyISAM con 6 colonne INT, 1 SMALLINT, 2 TINYINT e 1 colonna FLOAT. Ha miliardi di righe (il file di dati è 100 GB). Stavo cercando di indicizzare su tutte le delle colonne abilitando le chiavi, ma non è mai successo. Cercando "myisamchk -r tableName" ha dato il seguente errore:Riparazione/indicizzazione di grandi tabelle e 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 

Uso "myisamchk -rov tableName" invece riprende sempre (presumibilmente perché esso utilizza il metodo cache delle chiavi, non il metodo di ordinamento).

Non ha senso aumentare myisam_sort_buffer_size in questo caso (la risposta a myisam_sort_buffer_size vs sort_buffer_size suggerisce di aumentare il valore non ha senso). La macchina ha 32 GB di RAM.

risposta

1

Se si stanno elaborando i dati da 100 GB offline. Creare tabelle batch suddividendo i dati in tabelle separate, ognuna con pochi milioni di dati con un motore di indicizzazione e base dati adeguato come innodb.

Se si utilizzano tali dati online in un'applicazione in tempo reale, fare riferimento al collegamento riportato di seguito sulla gestione di un volume di dati enorme. What database works well with 200+GB of data?

3

è sufficiente aumentare la dimensione del buffer di ordinamento per myisamchk.

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

trovato qui: https://ma.ttias.be/mysql-myisamchk-error-myisam_sort_buffer_size-is-too-small/

+0

(idealmente?) Il valore sort_buffer_size dovrebbe essere in grado di tenere il più grande indice di + un certo overhead - non la somma di tutti gli indici, ma le dimensioni del più grande. Ho riscontrato errori di segmentazione quando il buffer non era abbastanza grande. – user3127882

Problemi correlati