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.
(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