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.

Booster les performances de MariaDB

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;

MariaDB /