OVH Cloud OVH Cloud

Mesurer la duree d'une requete MySQL

14 réponses
Avatar
Antoine Dinimant
Bonjour,

Sur un site en PHP/MySQL, je cherche à mesurer la durée d'exécution
d'une requête... mais sans la durée de la connexion de PHP à la base MySQL.

La doc MySQL précise que toutes les fonctions CurDate et autres sont
évaluées une seule fois au début de l'exécution, donc pas moyen
d'utiliser ça.

Faire une première requête d'obtention de la sysdate, lancer la requête
à exécuter puis une troisième visant à obtenir à nouveau la sysdate me
semble ne faire que multiplier le temps de connexion par trois, alors
que je cherche à l'éliminer ?

La solution sur laquelle je suis en ce moment consiste à faire un
"tarage" de mes durée. Je mesure la durée d'une requête minimale "SELECT
1", y compris l'aller-retour entre PHP et MySQL, et cela me donne ma tare.

Je mesure ensuite la durée de ma requête, toujours aller-retour
PHP/MySQL compris. Le temps d'exécution "pur" serait donc
durée_requête - tare.

Ce n'est pas très propre et les résultats le sont encore moins. Le pb
est que les durées sont très aléatoires, et qu'il arrive
fréquemment que la tare soit supérieure à la durée de la requête...
j'essaie de lisser tout cela en faisant une moyenne sur 100 exécutions
de chaque requête, et cela améliore un peu les choses, mais pas
énormément...

voyez-vous ce qui cloche ? avez-vous de meilleures idées ?

Par ailleurs, phpMyAdmin donne des durées de requêtes. Savez-vous
comment elles sont mesurées ?

4 réponses

1 2
Avatar
Antoine Dinimant
Oui, essaye avec MySQL controle que tu trouves sur mysql.com ou DBdesigner
J'ai fait quelques tests, le deux donnent le même résultat à la différence que DBDesigner indique 3 chiffres après la
virgule tandis que MySQL Controle en donne 2.



OK, je vais essayer... peuvent-ils être utilisés dynamiquement par un
site PHP, ou seulement interrogés "à la main" par un programmeur ?
Avatar
Nevr0tyk
"Antoine Dinimant" a écrit dans le message de
news:
Bonjour,

Sur un site en PHP/MySQL, je cherche à mesurer la durée d'exécution
d'une requête... mais sans la durée de la connexion de PHP à la base


MySQL.





T'as regardé la fonction BENCHMARK() de MySQL ?
http://dev.mysql.com/doc/mysql/fr/Query_Speed.html

J'espère que ça pourra t'aider.
A+
Avatar
Antoine Dinimant
T'as regardé la fonction BENCHMARK() de MySQL ?
http://dev.mysql.com/doc/mysql/fr/Query_Speed.html



Je ne connaissais pas et c'est très intéressant... Comme tous les trucs
en ligne de commande, ça ne me semble pas intégrable dans un site, mais
ça me servira dans plein d'autres occasions !

Merci beaucoup !

Antoun
Avatar
Stéphane
"Antoine Dinimant" a écrit:
> Oui, essaye avec MySQL controle que tu trouves sur mysql.com ou DBdesigner
> J'ai fait quelques tests, le deux donnent le même résultat à la différence que DBDesigner indique 3 chiffres après


la
> virgule tandis que MySQL Controle en donne 2.

OK, je vais essayer... peuvent-ils être utilisés dynamiquement par un
site PHP, ou seulement interrogés "à la main" par un programmeur ?




Une fois la requette construite, tu peux pour commencer l'enregisrter dans un bibliotèque (DBdesigner), puis les
interger dans du code PHP.

Depuis que j'ai découvert DBdesigner, je ne peux plus m'en passer.

Stéphane
La souplesse d'esprit permet de s'adapter dans toutes circonstances.

http://www.velo-passion.com pour les fans de vélo
http://www.lorimier.com/chemin-des-cretes-du-jura une ballade à pied d'une semaine à 2
http://www.baby-boum.ch l'enfant n'est-il pas l'avenir de l'homme?



1 2