Как показать время запроса в Perl, DBI?

Я использую Perl и DBI для управления моими таблицами MySQL, запросами и т. д. Как я могу показать время выполнения запроса?

Если я сделаю выбор в консоли, результат будет следующим:

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

мне нужно показать 0.17 sec. Есть ли способ в DBI показать время работы в Perl, что-то вроде этого?

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

4 ответов


Я ничего не могу найти в DBI. Я думаю, что ничего уже не реализовано из коробки, хотя может быть интересная информация.

другой способ сделать это-получить время до и после выполнения, а затем сделать простую разницу. Вы можете сделать это из своего скрипта Perl, просто получив отметку времени до выполнения запроса, а затем вычесть их, чтобы найти время выполнения.

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";

вы берете метку времени перед запуском запроса и метку времени после. Разница заключается во времени выполнения запроса. Для получения меток времени с высоким разрешением см. Time:: HiRes



чтение ссылок @daxim на документацию, есть простой способ достичь этого, запустив свой скрипт с DBI_PROFILE=2 который с DBI:: профиль

пример:

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)