Ho una tabella innodb in mysql con meno di 2milioni di record e dati + dimensioni dell'indice di circa 1,5 GB Devo fare alter table per aggiungere una riga al tavolo. Ogni volta che eseguo alter table mysql faccio sempre una copia in temptable. La macchina di database ha 100 GB di RAM, quindi mi aspetto che la tabella delle modifiche debba essere eseguita in memoria. Ho impostato:
tmp_table_size = 10G
max_heap_table_size = 10G
sort_buffer_size = 10G
innodb_buffer_pool_size=50G
Ma questo non ha aiutato. Come posso configurare mysql per evitare di copiare su temptable?
risposte:
2 per risposta № 1MySQL non funziona ALTER TABLE
nella memoria in ogni caso. L'aggiunta di una nuova colonna a una tabella richiede la creazione di una nuova tabella (con il nuovo schema), la copia di tutte le righe dalla vecchia tabella alla nuova tabella e lo scambio atomico della tabella vecchia e nuova. A seconda della versione di MySQL, alcuni tipi di ALTER TABLE
, come l'aggiunta di nuovi indici, può essere possibile eseguire "online" dove altre operazioni non sono bloccate durante l'operazione. Tuttavia questo è ancora fatto "su disco" per quanto riguarda la tua domanda.