Start with performance suite.
This commit is contained in:
parent
561b35e556
commit
cf76759f34
138
src/test/performance/runtests.pl
Executable file
138
src/test/performance/runtests.pl
Executable file
@ -0,0 +1,138 @@
|
||||
#!/usr/local/bin/perl
|
||||
#
|
||||
# Accepts one argument - DBMS name (pgsql, ...) and initializes
|
||||
# global variable $TestDBMS with this name.
|
||||
#
|
||||
|
||||
# Where to run tests
|
||||
$DBNAME = 'perftest';
|
||||
|
||||
# This describtion for all DBMS supported by test
|
||||
# DBMS_name => [FrontEnd, DestroyDB command, CreateDB command]
|
||||
|
||||
%DBMS = (
|
||||
'pgsql' => ["psql -q -d $DBNAME", "destroydb $DBNAME", "createdb $DBNAME"]
|
||||
);
|
||||
|
||||
# Tests to run: test' script, test' description, ...
|
||||
# Test' script is in form
|
||||
#
|
||||
# script_name[.ntm][ T]
|
||||
#
|
||||
# script_name is name of file in ./sqls
|
||||
# .ntm means that script will be used for some initialization
|
||||
# and should not be timed: runtests.pl opens /dev/null as STDERR
|
||||
# in this case and restore STDERR to result file after script done.
|
||||
# Script shouldn't notice either he is running for test or for
|
||||
# initialization purposes.
|
||||
# T means that all queries in this test (initialization ?) are to be
|
||||
# executed in SINGLE transaction. In this case global variable $XACTBLOCK
|
||||
# is not empty string. Otherwise, each query in test is to be executed
|
||||
# in own transaction ($XACTBLOCK is empty string). In accordance with
|
||||
# $XACTBLOCK, script is to do DBMS specific preparation before execution
|
||||
# of queries. (Look at example in sqls/inssimple for MySQL - it gives
|
||||
# an idea of what can be done for features unsupported by an DBMS.)
|
||||
#
|
||||
@perftests = (
|
||||
# It speed up things
|
||||
'connection.ntm', 'DB connection startup (no timing)',
|
||||
# Just connection startup time (echo "" | psql ... - for PgSQL)
|
||||
'connection', 'DB connection startup',
|
||||
'crtsimple.ntm', 'Create SIMPLE table (no timing)',
|
||||
# 8192 inserts in single xaction
|
||||
'inssimple T', '8192 INSERTs INTO SIMPLE (1 xact)',
|
||||
'drpsimple.ntm', 'Drop SIMPLE table (no timing)',
|
||||
'crtsimple.ntm', 'Create SIMPLE table (no timing)',
|
||||
# 8192 inserts in 8192 xactions
|
||||
'inssimple', '8192 INSERTs INTO SIMPLE (8192 xacts)',
|
||||
'vacuum.ntm', 'Vacuum (no timing)',
|
||||
# Fast (after table filled with data) index creation test
|
||||
'crtsimpleidx', 'Create INDEX on SIMPLE',
|
||||
'drpsimple.ntm', 'Drop SIMPLE table (no timing)',
|
||||
'crtsimple.ntm', 'Create SIMPLE table (no timing)',
|
||||
'crtsimpleidx.ntm', 'Create INDEX on SIMPLE (no timing)',
|
||||
# 8192 inserts in single xaction into table with index
|
||||
'inssimple T', '8192 INSERTs INTO SIMPLE with INDEX (1 xact)',
|
||||
# 8192 SELECT * FROM simple WHERE justint = <random_key> in single xaction
|
||||
'slcsimple T', '8192 random INDEX scans on SIMPLE (1 xact)',
|
||||
# SELECT * FROM simple ORDER BY justint
|
||||
'orbsimple', 'ORDER BY SIMPLE',
|
||||
);
|
||||
|
||||
#
|
||||
# It seems that nothing below need to be changed
|
||||
#
|
||||
|
||||
$TestDBMS = $ARGV[0];
|
||||
die "Unsupported DBMS $TestDBMS\n" if !exists $DBMS{$TestDBMS};
|
||||
|
||||
$FrontEnd = $DBMS{$TestDBMS}[0];
|
||||
$DestroyDB = $DBMS{$TestDBMS}[1];
|
||||
$CreateDB = $DBMS{$TestDBMS}[2];
|
||||
|
||||
print "(Re)create DataBase $DBNAME\n";
|
||||
|
||||
`$DestroyDB`; # Destroy DB
|
||||
`$CreateDB`; # Create DB
|
||||
|
||||
$ResFile = "Results.$TestDBMS";
|
||||
$TmpFile = "Tmp.$TestDBMS";
|
||||
|
||||
open (SAVEOUT, ">&STDOUT");
|
||||
open (STDOUT, ">/dev/null") or die;
|
||||
open (SAVEERR, ">&STDERR");
|
||||
open (STDERR, ">$TmpFile") or die;
|
||||
select (STDERR); $| = 1;
|
||||
|
||||
for ($i = 0; $i <= $#perftests; $i++)
|
||||
{
|
||||
$test = $perftests[$i];
|
||||
($test, $XACTBLOCK) = split (/ /, $test);
|
||||
$runtest = $test;
|
||||
if ( $test =~ /\.ntm/ )
|
||||
{
|
||||
#
|
||||
# No timing for this queries
|
||||
#
|
||||
close (STDERR); # close $TmpFile
|
||||
open (STDERR, ">/dev/null") or die;
|
||||
$runtest =~ s/\.ntm//;
|
||||
}
|
||||
else
|
||||
{
|
||||
close (STDOUT);
|
||||
open(STDOUT, ">&SAVEOUT");
|
||||
print STDOUT "\nRunning: $perftests[$i+1] ...";
|
||||
close (STDOUT);
|
||||
open (STDOUT, ">/dev/null") or die;
|
||||
select (STDERR); $| = 1;
|
||||
printf "$perftests[$i+1]: ";
|
||||
}
|
||||
|
||||
do "sqls/$runtest";
|
||||
|
||||
# Restore STDERR to $TmpFile
|
||||
if ( $test =~ /\.ntm/ )
|
||||
{
|
||||
close (STDERR);
|
||||
open (STDERR, ">>$TmpFile") or die;
|
||||
}
|
||||
|
||||
select (STDERR); $| = 1;
|
||||
$i++;
|
||||
}
|
||||
|
||||
close (STDERR);
|
||||
open(STDERR, ">&SAVEERR");
|
||||
|
||||
open (TMPF, "<$TmpFile") or die;
|
||||
open (RESF, ">$ResFile") or die;
|
||||
|
||||
while (<TMPF>)
|
||||
{
|
||||
$str = $_;
|
||||
($test, $rtime) = split (/:/, $str);
|
||||
($tmp, $rtime, $rest) = split (/[ ]+/, $rtime);
|
||||
print RESF "$test: $rtime\n";
|
||||
}
|
||||
|
6
src/test/performance/start-pgsql.sh
Executable file
6
src/test/performance/start-pgsql.sh
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Please choose amount of sort memory (-S XXX) as appropriate
|
||||
# for your system: more is better, but swapping breaks performance!
|
||||
|
||||
exec postmaster -B 256 '-o -S 2048' -S
|
Loading…
x
Reference in New Issue
Block a user