GNT sans publicité, site mobile, fonctionnalitées exclusives...

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 ?
Lire les 14 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
RAKOTOMALALA Renaud
Le #21714021
Antoine Dinimant a écrit :

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.



[../..]
voyez-vous ce qui cloche ? avez-vous de meilleures idées ?


oui tu te connectes en ligne de commande à ta base en local, et tu
executes ta requetes.


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



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
Antoine Dinimant
Le #21714011
RAKOTOMALALA Renaud a écrit:
Antoine Dinimant a écrit :

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.



[../..]

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



oui tu te connectes en ligne de commande à ta base en local, et tu
executes ta requetes.



je précise que je suis chez un hébergeur (en l'occurrence Free) dont je
doute qu'il me laisse faire ça

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




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é.



j'ai bien peur de tout ignorer des commandes en questions... peux-tu
m'en dire un peu + ?
Pimousse
Le #21713981
une solution pourrait être la suivante :
- 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
Antoine Dinimant
Le #21713971
c'est exactement ce que je fais... mais là je prends le temps de la
discussion entre PHP et MySQL, ce que je souhaite éviter...

Pimousse a écrit:
une solution pourrait être la suivante :
- 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
Antoine Dinimant
Le #21713951
Comme il semblerait que ma première formulation n'était pas très claire
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)
Publicité
Suivre les réponses
Poster une réponse
Anonyme