Ho questa procedura:
codice:
CREATE PROCEDURE optimize_tables()
BEGIN
UPDATE configs SET value = "1" WHERE name = "db_maintenance";
set @a=null,@c=null,@b=concat("show tables where",ifnull(concat("`Tables_in_",database(),"` like '",@c,"' and"),'')," (@a:=concat_ws('`,`',@a, `Tables_in_",database(),"`))");
Prepare `bd` from @b;
EXECUTE `bd`;
DEALLOCATE PREPARE `bd`;
set @a:=concat('optimize table `',@a,'`');
PREPARE `sql` FROM @a;
EXECUTE `sql`;
DEALLOCATE PREPARE `sql`;
set @a=null,@b=null,@c=null;
UPDATE configs SET `value` = "0" WHERE name = "db_maintenance";
UPDATE configs SET `value` = NOW() WHERE name = "last_optimization";
END$$
DELIMITER ;
che viene eseguita secondo lo scheduling:
codice:
CREATE EVENT optimizeDBEvent
ON SCHEDULE EVERY 1 WEEK
DO CALL optimize_tables();
solo che, quando la eseguo inserisco nella tabella configs il campo maintenance a 1 e il sito diventa "out of service" per qualche minuto.
Posso evitare di metterlo down e fare comunque l'ottimizzazione?