2012-05-29 6 views
8

私はMySQLテーブル、クエリーなどを管理するためにPerlとDBIを使用します。どのようにクエリの実行時間を表示できますか?DBIのPerlでクエリ時間をどのように表示できますか?

私はコンソールでSELECTを行う場合、結果はこのようになります:

+-----+-------------+ 
| 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; # ??? 

答えて

3

DBIで何も見つかりません。面白い情報かもしれませんが、すでに実装されているものは何もないと思います。

これを実行するもう1つの方法は、実行の前後の時間を取得してから単純な違いを作ることです。あなたはPerlスクリプトの中からクエリ実行の前にタイムスタンプを取得するだけで済みます。その後、実行時間を見つけるために2つを減算します。

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

[Benchmark](http://perldoc.perl.org/Benchmark.html)をDateTimeの代わりに ':hireswallclock'と一緒に使うと、うまくいくでしょう。 – simbabque

+0

ほとんどの場合、0が返されます。 –

+0

非常に一般的な2秒未満のクエリの時間にはあまり役に立ちません。 –

6

クエリを実行する前にタイムスタンプを取得し、その後にタイムスタンプを付けます。違いは、クエリの実行時間です。高解像度のタイムスタンプを取得するには、Time::HiRes

+0

undeはありませんr DBI? – netdjw

+0

あなたはそれについてDBIドキュメントをチェックすべきですが、私はそれを疑っています。 – lanzz

+1

質問をする前に私はチェックされました。 – netdjw

6

DBI#ProfileDBI::ProfileDBI::ProfileDataDBI::ProfileDumper、ドキュメントへのdaximのリンク@読むdbiprof

+2

一連のリンクを提供するのではなく、その理由を示す抜粋を提供してください。これは、コンテンツを要約するのに役立ちますし、リンクが腐って壊れた場合に役立つ情報を提供します。 –

1

DBI::Profile

例からであるDBI_PROFILE=2でスクリプトを実行することによって、これを達成するための簡単な方法があります出力:

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) 
関連する問題