Tous les articles
MySQLPerformance

Optimiser MySQL : 80 % du gain en 5 réglages

Publié le 20 août 2024 · 11 min de lecture

MySQL rapide : 80 % du gain en cinq réglages

MySQL/MariaDB mal configuré est la première cause de lenteur des applications web que nous voyons. La bonne nouvelle : l'essentiel du gain tient dans quelques lignes de my.cnf.

1. InnoDB buffer pool : le roi des réglages

C'est la mémoire cache des données et index. Règle : 60-70 % de la RAM dédiée à MySQL. Sur un Titan (16 GB) avec MySQL seul ou presque : innodb_buffer_pool_size = 10G. Toutes les données tiennent en RAM, les lectures disque disparaissent.

2. innodb_flush_log_at_trx_commit = 2

Écrit le log de transactions une fois par seconde au lieu de chaque commit. Perte potentielle : 1 seconde de transactions en cas de crash brutal (pas de coupure OS). Gain : jusqu'à 5× sur les écritures intensives. Acceptable pour 99 % des applications.

3. innodb_io_capacity adapté au NVMe

Les valeurs par défaut (200) datent des disques mécaniques. Sur notre NVMe Gen4 : innodb_io_capacity = 4000 et innodb_io_capacity_max = 8000. MySQL arrête de brider ses écritures de fond.

4. Désactivez le query cache (MySQL 5.7/MariaDB)

Contre-intuitif mais vrai : le query cache verrouille et ralentit sous concurrence. Redis en cache applicatif fait mieux, sans contention.

5. slow_query_log = 1

Activez le log des requêtes lentes (long_query_time = 0.5) et consultez-le chaque semaine. Un index manquant sur une table de 10 M de lignes fait plus de dégâts que tous les réglages réunis.

Mesurez avant et après

sysbench oltp_read_write ou un simple ab/k6 sur votre page la plus lourde. Nos clients qui appliquent ces cinq réglages mesurent typiquement un TTFB divisé par deux sur WooCommerce.