web-dev-qa-db-fra.com

Comment obtenir le temps d'exécution d'une requête MySQL depuis PHP?

J'exécute des requêtes MySQL à partir de PHP et je voudrais savoir combien de temps elles prennent. Existe-t-il un moyen d'obtenir le temps d'exécution d'une requête MySQL à partir de PHP?

Je me demande également si le temps d'exécution dépend de la charge du serveur Web. Je peux imaginer qu'une requête prendra plus de temps à s'exécuter si le serveur est occupé par d'autres requêtes. D'un autre côté, je peux imaginer que, si le serveur est occupé, la requête attendra juste son tour et ensuite elle sera exécutée (sans aucune requête exécutée en parallèle) et que le temps d'attente n'est pas inclus dans le temps d'exécution . Alors, quels scénarios (sur deux) sont corrects?

27
Roman

Il existe probablement un moyen de le faire via MySQL, cependant, la manière simple (et fiable) utilise la fonction microtime de PHP, qui renvoie l'heure actuelle en millisecondes.

microtime () renvoie l'horodatage Unix actuel avec microsecondes. Cette fonction est uniquement disponible sur les systèmes d'exploitation qui prennent en charge l'appel système gettimeofday ().

getasfloat - Lorsqu'elle est appelée sans l'argument facultatif, cette fonction renvoie la chaîne "msec sec" où sec est le temps actuel mesuré en nombre de secondes depuis le Epoque Unix (0:00:00 1er janvier 1970 GMT), et msec est la partie en microsecondes. Les deux parties de la chaîne sont renvoyées en unités de secondes.

Si l'option get_as_float est définie sur TRUE, un flottant (en secondes) est renvoyé.

Un exemple de code:

$sql = '...';
$msc = microtime(true);
mysql_query($sql);
$msc = microtime(true)-$msc;
echo $msc . ' s'; // in seconds
echo ($msc * 1000) . ' ms'; // in millseconds
56
Christian

microtime() met du temps à s'exécuter. Si vous voulez obtenir les données directement de mysql, faites ceci ...

mysql_query("SET profiling = 1;");
if (mysql_errno()) { die( "ERROR ".mysql_errno($link) . ": " . mysql_error($link) ); }

$query="SELECT some_field_name FROM some_table_name";
$result = mysql_query($query);
if (mysql_errno()) { die( "ERROR ".mysql_errno($link) . ": " . mysql_error($link) ); }

$exec_time_result=mysql_query("SELECT query_id, SUM(duration) FROM information_schema.profiling GROUP BY query_id ORDER BY query_id DESC LIMIT 1;");
if (mysql_errno()) { die( "ERROR ".mysql_errno($link) . ": " . mysql_error($link) ); }
$exec_time_row = mysql_fetch_array($exec_time_result);

echo "<p>Query executed in ".$exec_time_row[1].' seconds';
10
G-J