-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun-benchmark.sh
executable file
·105 lines (89 loc) · 2.29 KB
/
run-benchmark.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/bin/bash
set -x
if [ -z "${RUNTIME}" ] ; then
RUNTIME=`date "+%Y-%m-%d.%H:%M:%S"`
fi
TRIES=${TRIES:-3}
ANALYZE=true
LOAD=true
DIRNAME=$(dirname -- "$0")
while getopts 'b:v:u:t:znh' OPTION; do
case "$OPTION" in
b)
BENCHMARK="$OPTARG"
;;
v)
VARIANT="$OPTARG"
;;
u)
USER="$OPTARG"
;;
n)
LOAD=false
;;
z)
ANALYZE=false
;;
t)
TAG="$OPTARG"
;;
h)
echo "run-benchmark.sh [-b benchmark] [-v variant] [-n]"
echo " -b benchmark to run: clickbench, warehouse, or pgbench"
echo " -v variant to use: cached, uncompressed, or zstd"
echo " -n disables loading and deleting of data"
echo " -u user to run psql as"
echo " -z disables analyzing data"
echo " -t tag"
echo " -h this help"
exit 0
;;
?)
echo "run-benchmark.sh [-b benchmark] [-v variant] [-n]" >&2
exit 1
;;
esac
done
shift "$(($OPTIND -1))"
if [ -z "${BENCHMARK-}" ] ; then
echo "ERROR: you must provide a benchmark"
exit 1
fi
if [ -z "${VARIANT-}" ] ; then
echo "ERROR: you must provide a variant"
exit 1
fi
cd $DIRNAME
if [ -z "${TAG}" ] ; then
PATHNAME=results/$BENCHMARK/$VARIANT/$RUNTIME
ANALYZED=results/$BENCHMARK-$VARIANT-$RUNTIME.json
else
PATHNAME=results/$BENCHMARK/$VARIANT/$TAG/$RUNTIME
ANALYZED=results/$BENCHMARK-$VARIANT-$TAG-$RUNTIME.json
fi
# set up the output directory
mkdir -p $PATHNAME
if [ "$LOAD" = true ] ; then
psql -U $USER -c "CREATE DATABASE \"$BENCHMARK\""
fi
psql -U $USER $BENCHMARK -f variants/$VARIANT/setup.sql -f $BENCHMARK/setup.sql >$PATHNAME/setup.out 2>$PATHNAME/setup.err
psql -U $USER $BENCHMARK -f variants/$VARIANT/data.sql -f $BENCHMARK/data.sql >$PATHNAME/data.out 2>$PATHNAME/data.err
if [ "$(cat $PATHNAME/*.err | grep -v NOTICE | wc -l)" != "0" ]; then
echo Error detected:
cat $PATHNAME/*.err
exit 1
fi
for query in $BENCHMARK/queries/*; do
sync
echo 3 | tee /proc/sys/vm/drop_caches
file="$(basename $query)"
for i in $(seq 1 $TRIES); do
psql -U $USER $BENCHMARK -f variants/$VARIANT/query.sql -f $query >$PATHNAME/$file-$i.out
done
done
if [ "$ANALYZE" = true ] ; then
./analyze.js $PATHNAME > $ANALYZED
fi
if [ "$LOAD" = true ] ; then
psql -U $USER -c "DROP DATABASE \"$BENCHMARK\""
fi