2012-05-29 25 views
8

MySQL tablolarımı, sorgularımı yönetmek için Perl ve DBI kullanıyorum. Sorgulamanın çalışma süresini nasıl gösterebilirim? Ben konsolda bir SEÇ yaparsanızPerl, DBI'da sorgu süresini nasıl gösterebilirim?

, sonuç böyle olacaktır:

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

Ben 0.17 sec göstermek gerekir. DBI'da Perl'de koşma süresini göstermek için böyle bir şey var mı?

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

cevap

3

DBI'de hiçbir şey bulamıyorum. Zaten kutudan yapılmış hiçbir şey olmadığını düşünüyorum, ancak ilginç bilgiler olabilir.

Bunu yapmanın başka bir yolu, yürütme işleminden önce ve sonra zaman elde etmek ve sonra basit bir fark yaratmaktır. Perl komut dosyanızdan, sorgu yürütmeden önce zaman damgasını almanızdan sonra, sonra da yürütme süresini bulmak için ikiyi çıkartabilirsiniz.

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) ile DateTime yerine ': hireswallclock' kullanmak da işe yarayacaktır. – simbabque

+0

çoğunlukla 0 döndürür. –

+0

Oldukça sık kullanılan –

6

Sorguyu çalıştırmadan önce bir zaman damgası ve sonra bir zaman damgası alırsınız. Fark, sorgu yürütme sürenizdir. Yüksek çözünürlüklü zaman damgaları elde etmek için, bkz. Time::HiRes

+0

r DBI? – netdjw

+0

Bunun için DBI belgelerini kontrol etmelisiniz, ancak şüphem var. – lanzz

+1

Soruyu sormadan önce kontrol edildim. – netdjw

6
+2

alt saniye sorgu süreleri için çok yararlı olmaz, bir dizi bağlantı sağlamak yerine, bunların neden yararlı olduğunu gösteren alıntılar sağlayın. Bu, içeriği özetlemeye yardımcı olur, ayrıca bağlantıların çürümesi ve kırılması durumunda faydalı bilgiler sağlar. –

1

Okuma @ daxim en bağlantılar, DBI::Profile

Örnek dan DBI_PROFILE=2 ile komut dosyası çalıştırarak bunu başarmak için basit bir yol var çıkış:

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) 
İlgili konular