Как показать время запроса в 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)