Voici une configuration qui fonctionne sur un site Ă fort trafic.
!!! note Ă adapter Ă la taille de la base et au trafic utilisateurs.
On dĂ©sactive le cache de requĂȘtes.
L’invalidation de ce cache est coĂ»teuse et vĂ©rrouille tout le cache pendant sa mise Ă jours.
set global query_cache_type=0;
set global optimizer_switch="subquery_cache=off";
- On défini par exemple :
# si la db fait 20Go
innodb_buffer_pool_size = 20Go
innodb_buffer_pool_instances = 20
# threads innodb simultanés : 2 x nb de CPU + nb de disques
innodb_thread_concurrency = 86
# vérifier la fréquence de fork de Mariadb/MySQL et les pics de nb de threads
thread_cache = 128
# on vérifie la fréquence d'accÚs aux tables
table_cache = 2048
# on active les log des requĂȘtes lentes :
slow_query_log = 1
# on remonte les requĂȘtes lentes au delĂ de la seconde
long_query_time = 1
slow_launch_time = 1
Explications
- Dimensionner correctement
innodb_buffer_pool
permet de garder les données en mémoire aprÚs leur lecture. - La limitation de
innodb_thread_concurrency
Ă©vite les fork bombs lorsque des requĂȘtes sont bloquĂ©es. - Le
thread_cache
permet d’Ă©viter la crĂ©ation et la suppression de threads lors d’un trafic normal.