#!/usr/bin/perl -w $|++; use strict; use Time::HiRes qw/time/; use DBI; use DBD::Sybase; my ($dbi, $user, $pass, $sql, $logEvery) = @ARGV or die(q{ Syntax: call_sp connect_string user password sql Example: call_sp dbi:Sybase:server=DEV_DB_01_DS;database=test_performance sa PASSWORD "exec jpl_test" }); $logEvery ||= 200; my $dbh = DBI->connect( $dbi, $user, $pass, { RaiseError => 1, PrintError => 0 } ); my $sth = $dbh->prepare($sql); my @aOldAverage; my $maxOldAverage = 10; my $no = 0; my $timeLatest = time(); while(1) { if($no++ > $logEvery) { my $timeNow = time(); my $timeDuration = $timeNow - $timeLatest; my $freq = sprintf("%0.2d", $no / ($timeDuration || 1)); $timeLatest = $timeNow; $no = 0; push(@aOldAverage, $freq); if(@aOldAverage > $maxOldAverage) { shift(@aOldAverage); } my $oldCount = @aOldAverage; my $sum = 0; $sum += $_ for(@aOldAverage); my $avg = sprintf("%0.2d", $sum / $oldCount); print localtime() . ": $freq / sec ($avg/sec for the last $oldCount readings)\n"; } eval { $sth->execute(); }; if($@) { warn("$@\n"); $sth = $dbh->prepare($sql); next; } $sth->fetchall_arrayref; $sth->finish; } __END__