How to reclaim space in InnoDB when innodb_file_per_table is ON

Posted on 25 luglio 2014 di

0


Quando ottimizzate un database mysql per utilizzo con innodb_file_per_table esiste la possibilità di ottimizzare lo spazio grazie al comando di mysql: optimize table NOMETABELLA

Succede infatti che le cancellazioni all’interno dei db non modifichino lo spazio utilizzato dal file .idb e quindi lo spazio stesso va reclamato: ma come?

Collegatevi al db e poi date i seguenti comandi sql:

USE nomedb;

OPTIMIZE table nometabella;

Attezione però: il processo crea una nuova tabella e dopo cancella la vecchia, calcolate se avete lo giusto spazio libero su disco!

La pecca di questa procedura è che la tabella viene lockata in scrittura fino al termine della procedura.

Se lavorate in ambiente che non vi permette questo lusso, allora esiste la possibilità di utilizzare il tool di percona (free): molto comodo poichè utilizza una command line ed un output log chiarissimi…e soprattutto non locka la tabella utilizzando un “alter” direttamente da shell linux:

pt-online-schema-change –password XXX –alter “ENGINE=InnoDB” D=nomedb,t=nometabella –execute

C’è da dire che per come lavora, il secondo metodo è certamente più lento del primo.

Approfondimenti:

http://stackoverflow.com/questions/3456159/how-to-shrink-purge-ibdata1-file-in-mysql

http://www.mysqlperformanceblog.com/2013/09/25/how-to-reclaim-space-in-innodb-when-innodb_file_per_table-is-on/

 

 

 

 

 

Annunci
Messo il tag:
Posted in: Vmware