2010-10-27 14 views
5

Voglio ottenere i tempi effettivi di esecuzione della query Mysql mentre corrono nel mio progetto in modo da eseguire PHP microtime() prima e dopo e sottrarre ' lavoro.Ottenere il tempo di esecuzione effettivo (assoluto) dell'ultima query in PHP (esclusa latenza di rete, ecc.)

Quando si esegue una query in linea di comando, il risultato visualizza le informazioni di temporizzazione qualcosa di simile: -

xxx rows affected in YY sec 

Come ottenere le stesse informazioni di tempo utilizzando PHP. Ho cercato in PHP's Mysql functions in altre domande SO Here e here ma non ho ottenuto nulla di simile. Non esiste una funzione PHP come mysql_error(), mysql_affected_rows() che restituisce altre informazioni importanti? Se no, perché non è lì? Qualche ragionamento?

Qualcuno dice -

penso che il modo migliore per ottenere l'esecuzione tempo è quello di usare un po 'esecuzione del programma funzioni come exec() o il sistema().

Qualcuno ha un codice PHP funzionante che restituisce il tempo di esecuzione effettivo?

+0

È impossibile per PHP misurare il legame di esecuzione della query senza alcun contributo dall'analisi del codice php/della latenza di rete - solo il DBMS può farlo (ma è possibile recuperare il valore dal DBMS utilizzando PHP). Tuttavia, nella maggior parte dei casi un approccio più ragionevole è quello di ottenere mysql per collegarlo direttamente. – symcbean

+0

btw è la tua domanda risposta? – ITroubs

+0

@ITroubs, grazie per la soluzione, controllerò di eseguire questo e ti faccio sapere –

risposta

11

provare questo:

<?php 

$host='localhost'; 
$username='testing'; 
$password='testing'; 
$dbname='test'; 

$DBC = new mysqli($host,$username,$password,$dbname); 

$DBC->query('set profiling=1'); 
$DBC->query('SELECT * FROM abc'); 
if ($result = $DBC->query("SHOW profiles", MYSQLI_USE_RESULT)) { 


    while ($row = $result->fetch_row()) { 
     var_dump($row); 
    } 
    $result->close(); 
} 
if ($result = $DBC->query("show profile for query 1", MYSQLI_USE_RESULT)) { 


    while ($row = $result->fetch_row()) { 
     var_dump($row); 
    } 
    $result->close(); 
} 
$DBC->query('set profiling=0'); 

?> 

il primo se si dà il tempo di esecuzione complessivo per la query come questa:

array(3) { [0]=> string(1) "1" [1]=> string(10) "0.00024300" [2]=> string(17) "SELECT * FROM abc" } 

la seconda se si dà i tempi di esecuzione detaild della query. i risultati dovrebbero essere esatti poiché si utilizza il profiler interno mysql.

+0

ho usato mysqli perché sono abituato. puoi anche usare le normali funzioni mysql per questa attività – ITroubs

+0

grazie! funziona perfettamente –