2010-12-21 15 views
24

Ejecuto consultas de MySQL desde PHP y me gustaría saber cuánto tiempo consumen. ¿Hay alguna forma de obtener el tiempo de ejecución de una consulta MySQL desde PHP?¿Cómo obtener el tiempo de ejecución de una consulta MySQL desde PHP?

También me pregunto si el tiempo de ejecución depende de cuán cargado esté el servidor web. Me imagino que una consulta tardará más tiempo en ejecutarse si el servidor está ocupado con otras consultas. Por otro lado, puedo imaginar que, si el servidor está ocupado, la consulta esperará su turno y luego se ejecutará (sin consultas ejecutadas en paralelo) y el tiempo de espera no se incluirá en el tiempo de ejecución. . Entonces, ¿qué escenarios (de dos) es correcto?

Respuesta

51

Probablemente haya alguna manera de hacerlo a través de MySQL, sin embargo, la manera fácil (y confiable) es utilizar la función microtime de PHP, que devuelve la hora actual en milisegundos.

microtime() devuelve la fecha Unix actual con microsegundos. Esta función solo está disponible en los sistemas operativos que admiten la llamada al sistema gettimeofday().

getasfloat - Cuando se invoca sin el argumento opcional, esta función devuelve la cadena "mseg sec", donde sec es la hora actual medida en el número de segundos desde el Unix Epoch (0:00:00 01 de enero 1970 GMT), y msec es la parte de microsegundos. Ambas partes de la cadena se devuelven en unidades de segundos.

Si el get_as_float opcional está establecido en TRUE, se devuelve un flotador (en segundos).

un código de ejemplo:

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

gracias por la respuesta. Por cierto, ¿puede ser que también sepas sobre la segunda parte de la pregunta? ¿Debería este tiempo depender de qué tan fuerte esté cargado el servidor? – Roman

+1

Roman - Sí, lo hace, por supuesto. Funciona a lo largo del TIEMPO, no a pasos de la CPU, por lo que todo puede afectarlo, incluso una nueva conexión (por ejemplo). – Christian

+5

Es posible que también desee marcar una respuesta como correcta. :) – Christian

-3

para hacerlo bien fuera de MySQL puede utilizar el registro general.

Si su no está encendido, enciéndalo:

SET GLOBAL general_log = 'ON'; 

Para ver los datos después de que se le han acabado su consulta:

SELECT * FROM mysql.general_log; 

Entre otras cosas, obtendrá la ejecución de la consulta tiempo, tal como probablemente has visto en phpmyadmin.

+7

La tabla general_log no tiene el tiempo de consulta de ejecución. –

7

microtime() lleva tiempo para ejecutarse. Si desea obtener los datos directamente de mysql, haga esto ...

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'; 
Cuestiones relacionadas