Booster les performances de MariaDB
En pleine veille sur les moteurs de bases de données, je suis tombé sur cet excellent article nous rappelant à notre bon souvenir la commande ANALYZE TABLE, qui permet à MariaDB d’optimiser les requêtes par l’utilisation d’index appropriés. L’auteur de l’article, Andrew Hutchings, a dû fumer la moquette ce jour-là, évoquant des performances multipliées par 30.
La procédure stockée proc_analyze
Je vous ai donc écrit une petite procédure au doux nom de proc_analyze pour appliquer la commande à l’ensemble des tables des bases de données dsfc, extime, vm, sedf. dans l’exemple ci-dessous.
CREATE DATABASE IF NOT EXISTS tools; USE tools; DROP PROCEDURE IF EXISTS proc_analyze; DELIMITER // CREATE PROCEDURE proc_analyze() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE strTable VARCHAR(255); DECLARE strSchema VARCHAR(255); DECLARE curTables CURSOR FOR SELECT table_schema,TABLE_NAME FROM information_schema.TABLES WHERE -- table_schema NOT IN ('mysql','performance_schema','information_schema') table_schema IN ('dsfc','extime','vm','sedf') AND table_type='BASE TABLE'; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN curTables; read_loop: LOOP FETCH curTables INTO strSchema,strTable; IF done THEN LEAVE read_loop; END IF; SET @t=strTable; SET @s=strSchema; /* SET @sql=CONCAT('ALTER TABLE `',@s,'`.`',@t,'` ENGINE=InnoDB;'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; */ SET @sql=CONCAT('ANALYZE TABLE `',@s,'`.`',@t,'` PERSISTENT FOR ALL;'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END LOOP; CLOSE curTables; END; // DELIMITER ; CALL tools.proc_analyze;