venerdì 5 dicembre 2014

MYIsam vs InnoDB

Recentemente e' stato deciso un aggiornamento di un server interno basato su una vetusta Ubuntu 10.10 per passare ad una macchina e ad una distribuzione piu' recente
Nella migrazione un applicativo proprietario (per altro scritto in Java) basato su MySql ha iniziato a dare improvvisamente problemi con una lentezza delle query (con tempi di risposta aumentati da 10 a 100 volte)

Dopo un  po' di navigazione a vuoto per fortuna lo sviluppatore ha fornito l'indicazione corretta
bisogna impostare il motore dati di Mysql da InnoDB a MyIsam

con il tempo (e piu' precisamente da Ubuntu 12.04) le tabelle di default sono passate da InnoDB a MyIsam
In generale riprendendo dal sito MySql le MyIsam sono piu' performanti nelle SELECT (l'applicativo in uso nel server invece effettua circa 40 INSERT al secondo e solo sporadiche select)

per vedere il tipo di motore associato ad una tabella si puo' usare la seguente query

SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES where TABLE_SCHEMA = 'xxxxxxx';
Per convertire una tabella di InnoDB a MyIsam si puo' usare invece il comando

ALTER TABLE tablename ENGINE=MYISAM;


Una volta effettuata la modifica il programma e' ritornato a lavorare in modo corretto

Un altro aspetto non trascurabile di differenze tra InnoDB e MyIsam e' che le InnoDB di fatto non sono corruttibili. Se con MYIsam era necessario il comando

mysqlcheck --repair --all-databases -u root -p

adesso in caso di uso InnoDB si mostra l'avviso "The storage engine for the table doesn't support repair"