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