From: Vadim B. Mikheev Date: Fri, 26 Sep 1997 14:55:21 +0000 (+0000) Subject: Start with performance suite. X-Git-Tag: REL6_2~70 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cf76759f34a172d424301cfa3723baee37f4a7ce;p=postgresql Start with performance suite. --- diff --git a/src/test/performance/runtests.pl b/src/test/performance/runtests.pl new file mode 100755 index 0000000000..419b003328 --- /dev/null +++ b/src/test/performance/runtests.pl @@ -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 = 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 () +{ + $str = $_; + ($test, $rtime) = split (/:/, $str); + ($tmp, $rtime, $rest) = split (/[ ]+/, $rtime); + print RESF "$test: $rtime\n"; +} + diff --git a/src/test/performance/start-pgsql.sh b/src/test/performance/start-pgsql.sh new file mode 100755 index 0000000000..8ef3f7aa8e --- /dev/null +++ b/src/test/performance/start-pgsql.sh @@ -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