horizontal - Mysql OPTIMIZE TABLE para todas las tablas fragmentadas
fragmentacion de tablas en mysql (3)
Me gustaría OPTIMIZE
todas las tablas actualmente fragmentadas. Estas tablas deben tener information_schema.DATA_FREE > 0
.
¿Es posible optimizar todas las tablas con esta propiedad en un comando en SQL o tendré que escribir código externo para hacer esto?
Puedes hacer algo como esto:
SELECT concat("OPTIMIZE TABLE ", table_schema,".",table_name,";")
FROM tables
WHERE DATA_FREE > 0
INTO OUTFILE ''/tmp/optimize.sql'';
SOURCE ''/tmp/optimize.sql'';
Alternativamente, si el primero falla, intente:
SELECT concat("OPTIMIZE TABLE ", table_schema,".",table_name,";")
FROM information_schema.tables
WHERE DATA_FREE > 0
INTO OUTFILE ''/tmp/optimize.sql'';
SOURCE /tmp/optimize.sql;
Sé que hay una respuesta. Pero MySQL tiene esta recomendación para INNODB DB''s:
Puede acelerar las exploraciones de índice si realiza periódicamente una operación ALTER TABLE “nula”, lo que hace que MySQL reconstruya la tabla:
ALTER TABLE tbl_name ENGINE=INNODB
Encontrado aquí http://dev.mysql.com/doc/refman/5.0/en/innodb-file-defragmenting.html
ok, este es un post viejo, pero es necesario.
Phil Dufault http://www.dufault.info/blog/a-script-to-optimize-fragmented-tables-in-mysql/ ha escrito un script maravilloso, que está en github: https://github.com/pdufault/mysqlfragfinder/blob/master/mysqlfragfinder.sh
vim mysqlfragfinder.sh
#copy paste from github
chmod +x ./mysqlfragfinder.sh
./mysqlfragfinder.sh --user root_username --password root_password
y eso es todo. Lo he estado usando en varios servidores desde hace un tiempo.