mirror of https://github.com/postgres/postgres
parent
561b35e556
commit
cf76759f34
@ -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"; |
||||
} |
||||
|
||||
@ -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…
Reference in new issue