Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.sai.msu.su/~megera/postgres/pg-bench.pl
Дата изменения: Sun Aug 1 00:20:27 1999
Дата индексирования: Sat Dec 22 04:08:29 2007
Кодировка:
#!/usr/local/bin/perl

use strict;


use DBI;
use DBD::Pg;

use Benchmark;

# Change this
my $DSN = 'DBI:Pg:dbname=test';
my $TABLE = 'bench';

my($i);
sub TimeMe ($$$$) {
my($startMsg, $endMsg, $code, $count) = @_;
printf("\n%s\n", $startMsg);
my($t1) = Benchmark->new();
$@ = '';
eval {
for ($i = 0; $i < $count; $i++) {
&$code;
}
};
if ($@) {
print "Test failed, message: $@\n";
} else {
my($td) = Benchmark::timediff(Benchmark->new(), $t1);
my($dur) = $td->cpu_a;
printf($endMsg, $count, $dur, $count / $dur);
print "\n";
}
}


TimeMe("Testing empty loop speed ...",
"%d iterations in %.1f cpu+sys seconds (%d per sec)",
sub {
},
100000);


my($dbh);
TimeMe("Testing connect/disconnect speed ...",
"%d connections in %.1f cpu+sys seconds (%d per sec)",
sub {
$dbh = DBI->connect($DSN, undef, undef,{ 'RaiseError' => 1 });
$dbh->disconnect();
},
2000);


$dbh = DBI->connect($DSN, undef, undef,{ 'RaiseError' => 0 });
$dbh->do("DROP TABLE $TABLE");
$dbh->disconnect();

$dbh = DBI->connect($DSN, undef, undef,{ 'RaiseError' => 1 });
TimeMe("Testing CREATE/DROP TABLE speed ...",
"%d files in %.1f cpu+sys seconds (%d per sec)",
sub {
$dbh->do("CREATE TABLE $TABLE (id INT4, name CHAR(40),"
. " firstname CHAR(40), address CHAR(40),"
. " zip CHAR(10), city CHAR(40), email CHAR(40))");
$dbh->do("DROP TABLE $TABLE");
},
500);
$dbh->disconnect();

my $dbh = DBI->connect($DSN, undef, undef,{ 'RaiseError' => 1 });
$dbh->do("CREATE TABLE $TABLE (id INT4, name CHAR(40),"
. " firstname CHAR(40), address CHAR(40),"
. " zip CHAR(10), city CHAR(40), email CHAR(40))");
my(@vals) = (0 .. 499);
my($num);
TimeMe("Testing INSERT speed ...",
"%d rows in %.1f cpu+sys seconds (%d per sec)",
sub {
($num) = splice(@vals, int(rand(@vals)), 1);
$dbh->do("INSERT INTO $TABLE VALUES (?, 'Wiedmann', 'Jochen',"
. " 'Am Eisteich 9', '72555', 'Metzingen',"
. " 'joe\@ispsoft.de')", undef, $num);
},
500);

$dbh->disconnect();

my(@vals) = (0 .. 499);
$dbh = DBI->connect($DSN, undef, undef,{ 'RaiseError' => 1 });
TimeMe("Testing UPDATE speed ...",
"%d rows in %.1f cpu+sys seconds (%d per sec)",
sub {
($num) = splice(@vals, int(rand(@vals)), 1);
$dbh->do("UPDATE $TABLE SET name='NnamdeiW' WHERE id=$num");
},
500);

$dbh->disconnect();

my $dbh = DBI->connect($DSN, undef, undef,{ 'RaiseError' => 1 });
my($sth);
TimeMe("Testing SELECT speed ...",
"%d single rows in %.1f cpu+sys seconds (%.1f per sec)",
sub {
$num = int(rand(500));
$sth = $dbh->prepare("SELECT * FROM $TABLE WHERE id = $num");
$sth->execute();
$sth->fetch() or die "Expected result for id = $num";
},
100);

$sth->finish;
$dbh->disconnect();

$dbh = DBI->connect($DSN, undef, undef,{ 'RaiseError' => 1 });

TimeMe("Testing SELECT speed (multiple rows) ...",
"%d times 100 rows in %.1f cpu+sys seconds (%.1f per sec)",
sub {
$num = int(rand(400));
$sth = $dbh->prepare("SELECT * FROM $TABLE WHERE id >= $num"
. " AND id < " . ($num+100));
$sth->execute();
($sth->rows() == 100)
or die "Expected 100 rows for id = $num, got " . $sth->rows();
while ($sth->fetch()) {
}
},
100);

$sth->finish;
$dbh->disconnect();


exit;