8

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

コンソールで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; # ???
4

5 に答える 5

6

DBI#ProfileDBI::ProfileDBI::ProfileDataDBI::ProfileDumperdbiprof

于 2012-05-29T15:26:35.587 に答える
6

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

于 2012-05-29T12:29:12.167 に答える
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";
于 2012-05-29T13:20:26.643 に答える
1

ドキュメントへの@daximのリンクを読むと、 DBI::ProfileDBI_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)
于 2016-01-21T12:01:54.277 に答える
1

Time::HiRes を使用すると、クエリ時間を簡単に見つけることができます。Time::HiRes を使用した例を次に示します。

use Time::HiRes;

$start_time = Time::HiRes::gettimeofday();

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

$end_time = Time::HiRes::gettimeofday();

my $elapsedtime = sprintf("%.6f", $end_time - $start_time);
print "Execution time(seconds) : $elapsedtime \n";
于 2021-11-26T13:23:12.000 に答える