#!/usr/bin/perl -w use strict; use MyBench; use Getopt::Std; use Time::HiRes qw(gettimeofday tv_interval); use DBI; my %opt; Getopt::Std::getopt('n:r:h:d:f:', \%opt); my $num_kids = $opt{n} || 10; my $num_runs = $opt{r} || 200; my $sql_file = $opt{f} || "sqls.dat"; my $db = $opt{d} || "gs_de"; my $user = "root"; my $pass = ""; my $port = 3306; my $host = $opt{h} || "localhost"; my $dsn = "DBI:mysql:mysql_server_prepare=1;database=$db:host=$host;port=$port"; my $run_id = 0; sub execSQL { my $dbh; my $sql = ""; my @params = (); ($dbh, $sql, @params) = @_; $dbh->{RaiseError} = 1; my $sth = $dbh->prepare($sql); print ""; eval { $sth->execute(@params); }; if ($@){ print "FAILED";} else {print "OK";} print "\n"; $sth->finish(); } my $callback = sub { my $id = shift; my $cnt = 0; my @times = (); my @insert_times = (); ## wait for the parent to HUP me local $SIG{HUP} = sub { }; sleep 600; $run_id = $id; my $dbh = DBI->connect($dsn, $user, $pass, { RaiseError => 0 }); while ($cnt < $num_runs) { ## time the query my $t0 = [gettimeofday]; execSQL($dbh, "INSERT INTO xf_sessions ( session_id, session_expires, session_data) VALUES( '2fqdllua7qmhjqq8jrsgetlqb4', '1160584451', '') ON DUPLICATE KEY UPDATE session_expires = '1160584451', session_data = '' "); my $t1 = tv_interval($t0, [gettimeofday]); push @times, $t1; $cnt++; } $dbh->disconnect(); ## cleanup my @r = ($id, scalar(@times), min(@times), max(@times), avg(@times), tot(@times)); return @r; }; print "Database : " . $db . "\n"; print "Clients : " . $num_kids . "\n"; print "Runs : " . $num_runs . "\n"; my @results = MyBench::fork_and_work($num_kids, $callback); MyBench::compute_results('test', @results); exit; __END__