Comment obtenir le temps d'exécution D'une requête MySQL à partir de PHP? [dupliquer]
cette question a déjà une réponse ici:
- mysql exécution time 3 réponses
j'exécute des requêtes MySQL depuis PHP et j'aimerais savoir combien de temps elles prennent. Est-il possible d'obtenir le temps d'exécution d'une requête MySQL de PHP?
j'ai aussi me demande si le temps d'exécution dépend de la façon dont est chargé le serveur web. Je peux imaginer qu'une requête prendra plus de temps à s'exécuter si le serveur est occupé avec d'autres requêtes. D'autre part, j'imagine que, si le serveur est occupé, la requête va juste attendre son tour, puis il sera exécuté (sans les requêtes exécutées 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?
3 réponses
il y a probablement un moyen de le faire via MySQL, cependant, le moyen facile (et fiable) est d'utiliser la fonction microtime
de PHP, qui renvoie le temps courant en millisecondes.
microtime () renvoie le timestamp Unix courant avec des microsecondes. Cette fonction n'est disponible que sur les systèmes d'exploitation qui prennent en charge l'appel système gettimeofday ().
getasfloat - Lorsqu'elle est appelée sans l'argument optionnel, cette fonction renvoie la chaîne "msec sec" où sec est le temps actuel mesuré en nombre de secondes depuis L'époque Unix (0:00:00 1er janvier 1970 GMT), et msec est la partie microsecondes. Les deux parties de la chaîne sont retournées en unités de secondes.
si l'option get_as_float est définie à TRUE, alors un flottant (en secondes) est retourné.
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
microtime()
prend du temps à s'exécuter. Si vous voulez obtenir les données directement de mysql, faites-le...
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';
pour le sortir de MySQL vous pouvez utiliser le journal général.
si elle n'est pas déjà allumée, allumez-la:
SET GLOBAL general_log = 'ON';
pour voir les données après avoir lancé votre requête:
SELECT * FROM mysql.general_log;
entre autres choses, vous obtiendrez le temps d'exécution de la requête, tout comme vous avez probablement vu dans phpmyadmin.