Mesurer la duree d'une requete MySQL
Le
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 ?
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 ?

Poser une question


[../..]
oui tu te connectes en ligne de commande à ta base en local, et tu
executes ta requetes.
oui par le même principe que l'interpreteur de commande SQL de mysql. Le
SQL est un vrai langage, il comporte beaucoup plus de fonction que la
simple manipulation des données et du dictionnaire de donné.
Cordialement,
--
RAKOTOMALALA RENAUD
W-CONSULTING http://www.w-consulting.fr
Librenet Network http://www.librenet.net
InsideNetworks http://www.insidenetworks.net
je précise que je suis chez un hébergeur (en l'occurrence Free) dont je
doute qu'il me laisse faire ça
j'ai bien peur de tout ignorer des commandes en questions... peux-tu
m'en dire un peu + ?
- récupérer le temps en microsecondes
- lancer la requête
- récupérer le temps en microsecondes et faire la différence avec le
précédent
ce qui donne en code php :
$time_debut=@explode(' ',@microtime());
//
// TON CODE PHP, DONT PAR EX TA REQUETE MYSQL
//
$time_fin=explode(' ',microtime());
$delta=round($time_fin[0]+$time_fin[1]-$time_debut[0]-$time_debut[1],2);
$delta représente le temps écoulé ....
ça répond à ta question ? et ahma, c'est comme ça que procède phpmyadmin.
@++
Pimousse
discussion entre PHP et MySQL, ce que je souhaite éviter...
Pimousse a écrit:
je dirai cela autrement : je cherche à faire mesurer la durée de ma
requête *par MySQL*
(et sans introduire des artefacts par des aller-retours entre PHP et MySQL)