Optimiser mySQL

Optimisation des requêtes sous mySQL

A la base, si vous codez vos requêtes comme un cochon, il est normal que le serveur rame. Je ne vais pas vous faire un cours complet SQL ici, ce n'est pas le but. Avant de se lancer dans le tuning de la configuration, il faut vérifier que votre code soit efficace. Il est impératif de maitriser les index, d'éviter au possible les requêtes dans des boucles (retourner 20 résultats en 1 requête est plus rapide que chercher 20 fois 1 résultat), utiliser les bonnes clés, d'éventuellement partitionner les grosses tables, choisir le bon type de table, etc.

Mysql dispose à la base d'un outil logant les requêtes lentes. Il suffit de modifier le fichier de configuration my.cnf. Les hébergements mutualisés restreignent l'accès aux fichiers de configuration. Ceci n'est valable que pour les dédiés.

Exemple mySQL

log-slow-queries = /var/log/mysql/req-lentes.log
log-queries-not-using-indexes
long_query_time = 1
log_long_format

 

Faites attention de ne pas laisser le fichier log prendre toute la place disque disponible. C'est un test qui ne doit pas tourner longtemps, juste ce qu'il faut pour détecter les problèmes majeurs.

Tentez également mysqlreport, plutôt pratique.

Si vous êtes un adepte de Windows et de SQLServer, vous avez à disposition un outils fantastique, l'optimiseur de requêtes, vraiment génial. Usez et abusez en.

Cache base de données mySQL

MySql dispose de son propre cache de requêtes ou il peut sauver des résultats. C'est un système efficace quand les tables ne changent pas fréquemment et que les requêtes sont souvent les mêmes

Pour l'activer, dans le fichier de config de MySql de base (/etc/my.cnf) ajoutez :

query_cache_type = 1
query_cache_limit = 16M
query_cache_size = 256M

 

Cela va créer un cache de 256M (après redémarrage du serveur, donc attention en production).

mySQL et nombre de connections simultanées

Plus vous avez de trafic, plus la base est sollicitée. Sur un hébergement mutualisé, chaque part dispose d'un nombre limité de connections disponibles simultanément. Classiquement on ouvre la connexion, on fait sa requête, on ferme la connexion, qui devient disponible pour un autre utilisateur. Si vous disposez de 10 connections, cela veut dire que 10 ouvertures de base sont possibles en même temps.

En général cela suffit pour un assez grand nombre de visiteurs, puisque tout le monde ne les utilisent pas en même temps. Par contre, en cas de pic de trafic, cela risque d'être léger et provoquera des lenteurs dues a l'attente d'une connexion libre, voir à un plantage.

Le moyen de résoudre ce type de problème est d'augmenter ce nombre, toujours via le my.cnf :

max_connections = 100

 

Sources / Pour aller plus loin

Ressource Optimiser mySQL

A propos de l'auteur

Jacques Terrier

Jacques Terrier AKA Cobolian : Premier site en 98, puis quelques belles références à son palmarès. Fort de son background technique et marketing, Jacques est consultant e-commerce.