MySQL/MariaDB : Déterminer la taille recommandée de innodb_buffer_pool_size

Rapide mémo pour déterminer la taille recommandée du buffer pour les tables utilisant le moteur de stockage InnoDB de MySQL. Par défaut après installation cette valeur est en général à 128 Mo, ce qui peut être bien bas pour de grosses bases de données.


La requête ci-dessous retourne la taille à renseigner pour la valeur de la variable innodb_buffer_pool_size :

SELECT 
	CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS 
FROM (
	SELECT 
		SUM(data_length+index_length) Total_InnoDB_Bytes
	FROM information_schema.tables 
	WHERE engine='InnoDB'
) A;

Il suffit alors de renseigner cette valeur dans le fichier de configuration /etc/my.cnf :

[mysqld]
innodb_buffer_pool_size=8G

Redémarrer MySQL/MariaDB :

$ sudo systemctl restart mariadb

MySQL 5.6 occupe presque 500Mo de ressources

Depuis la version 5.6.17 de MySQL dans mon environnement de développement WAMP, les ressources occupées par le moteur de base de données flirtent avec les 500Mo.

Ressource avant

C’est plutôt ennuyeux. Il semble qu’il s’agisse de la valeur de la variable table_definition_cache qui est fixée par défaut à 1400, une valeur un peu trop importante pour mes besoins limités en développement local. La documentation informe que la valeur minimale est de 400, et que par défaut celle-ci est établie comme ceci : 400 + (table_open_cache / 2), plafonnée à la limite de 2000.

Cette variable n’est en principe pas présente dans le fichier de configuration de MySQL my.ini, il suffit de l’ajouter, puis de redémarrer MySQL, et le résultat est sans appel : environ 91Mo de ressources dans mon cas.

Ressource après

A noter que la documentation officielle informe que la valeur de table_definition_cache était établie à 400 jusqu’à MySQL 5.6.8