2012-05-29 15 views
8

Uso Perl y DBI para administrar mis tablas, consultas, etc. de MySQL. ¿Cómo puedo mostrar el tiempo de ejecución de una consulta?¿Cómo puedo mostrar el tiempo de consulta en Perl, DBI?

Si hago un SELECT en la consola, el resultado será la siguiente:

+-----+-------------+ 
| id | name  | 
+-----+-------------- 
| 1 | Jack  | 
| 2 | Joe   | 
| 3 | Mary  | 
+-----+-------------+ 
3 rows in set (0.17 sec) 

necesito mostrar 0.17 sec. ¿Hay alguna manera en DBI para mostrar el tiempo de ejecución en Perl, algo como esto?

my $dbh = $db->prepare("SELECT id, name FROM names ORDER BY id;"); 
$dbh->execute; 
print $dbh->runnin_time; # ??? 

Respuesta

3

No encuentro nada en DBI. Creo que ya no hay nada implementado de manera inmediata, aunque podría ser información interesante.

La otra forma de hacer esto sería obtener el tiempo antes y después de la ejecución y luego hacer una diferencia simple. Puede hacerlo desde dentro de su script Perl simplemente obteniendo la marca de tiempo antes de la ejecución de la consulta, y luego, restar los dos para encontrar el tiempo de ejecución.

my $start = DateTime->now; 
my $dbh = $db->prepare("SELECT id, name FROM names ORDER BY id;"); 
$dbh->execute; 
my $end = DateTime->now; 


my $elapsedtime = ($end->subtract_datetime($start))->seconds; 
print "Execution time(seconds) : $elapsedtime \n"; 
+2

El uso de [Benchmark] (http://perldoc.perl.org/Benchmark.html) con ': hireswallclock' en lugar de DateTime también funcionaría bien. – simbabque

+0

en su mayoría devuelve 0. –

+0

Esto no será muy útil para los tiempos de consulta por debajo del segundo que son bastante comunes –

6

Realiza una marca de tiempo antes de ejecutar la consulta y una marca de tiempo después. La diferencia es el tiempo de ejecución de su consulta. Para obtener marcas de tiempo de alta resolución, vea Time::HiRes

+0

¿No hay alguna manera de deshacer r DBI? – netdjw

+0

Debe verificar los documentos de DBI para eso, pero lo dudo. – lanzz

+1

Me consultaron antes de hacer la pregunta. – netdjw

1

lectura de @ daxim a la documentación, hay una manera sencilla de lograr esto ejecutando la secuencia de comandos con DBI_PROFILE=2 que es de DBI::Profile

Ejemplo salida:

DBI::Profile: 53.203692s 50.67% (6725 calls) script.pl @ 2016-01-21 11:51:49 
'INSERT INTO FOO ("BAR") VALUES (?)' => 
    0.057596s/2 = 0.028798s avg (first 0.051621s, min 0.005975s, max 0.051621s) 
'INSERT INTO BAZ ("QUX") VALUES (?)' => 
    0.367184s/44 = 0.008345s avg (first 0.039410s, min 0.002445s, max 0.039410s) 
Cuestiones relacionadas