Dans le cadre du développement d’un formulaire personnalisé pour Outlook, j’avais besoin d’accéder à une base de données hébergée sur un serveur MySQL sous Ubuntu.
Lors de l’établissement de la connexion ODBC, je constatais systématiquement un délai symptomatique de 5 secondes lors de l’exécution du code VBA ci-dessous :
Set adoConnexion = CreateObject( "ADODB.Connection" )
adoConnexion.ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=...;DATABASE=...;USER=...;PASSWORD=...;OPTION=3;"
adoConnexion.Open
Après avoir cherché un bon moment pour comprendre ce qui pouvait bien engendrer un délai aussi rédibitoire, j’ai fini par découvrir que cela était du au mécanisme utilisé par le serveur MySQL pour identifier les connexions des nouveaux clients.
Pour faire court, lorsqu’un nouveau client se connecte à un serveur MySQL, ce dernier vérifie son identité en deux temps. Tout d’abord en faisant une première résolution pour obtenir son nom d’hôte à partir de son adresse IP, puis en faisant une deuxième résolution pour obtenir son adresse IP à partir du nom d’hôte récupéré. Ces résolutions font appels aux services de DNS et prennent un certain temps, qui peut s’avérer pénalisant si les résolutions échouent, si le service de DNS est lent ou surchargé, ou encore si le nombre de demande de connexions simultannées est très important.
Si comme moi vous n’avez pas besoin de spécifier des noms d’hôtes particuliers dans les tables de privilèges de votre serveur MySQL, ou bien si vous pouvez les remplacer par leurs adresses IP, alors vous pouvez désactiver le mécanisme d’identification qui cause ce ralentissement. Pour ce faire, il suffit d’ajouter l’option skip-name-resolve au fichier de configuration du serveur MySQL et de redémarrer le service mysql.
Voici la procédure pour Ubuntu :
- lancez un terminal ;
- éditez le fichier
/etc/mysql/my.cnfen mode superutilisateur avec votre éditeur favori – en exécutant par exemple la commandesudo vi /etc/mysql/my.cnf; - ajoutez l’option
skip-name-resolvedans la section[mysqld]; - enregistrez le fichier et fermez votre éditeur ;
- exécutez la commande
sudo /etc/init.d/mysql restartpour redémarrer votre serveur MySQL.
Vous devriez retrouver le sourire :-)
Origine : How MySQL Uses DNS (http://dev.mysql.com/doc/refman/5.1/en/dns.html)

Commentaires
Ecrire un commentaire Trackback