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.