You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
7.7 KiB
180 lines
7.7 KiB
#!/bin/bash
|
|
set -e
|
|
|
|
echo "*******************************"
|
|
echo "** rollout singleuser queries**"
|
|
echo "*******************************"
|
|
|
|
PWD=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
|
parentPWD="$(dirname "$PWD")"
|
|
source $PWD/../functions.sh
|
|
|
|
GEN_DATA_SCALE=$1
|
|
EXPLAIN_ANALYZE=$2
|
|
RANDOM_DISTRIBUTION=$3
|
|
MULTI_USER_COUNT=$4
|
|
SINGLE_USER_ITERATIONS=$5
|
|
VERSION=$6
|
|
UTIL=$7
|
|
|
|
if [[ "$GEN_DATA_SCALE" == "" || "$EXPLAIN_ANALYZE" == "" || "$RANDOM_DISTRIBUTION" == "" || "$MULTI_USER_COUNT" == "" || "$SINGLE_USER_ITERATIONS" == "" || "$VERSION" == "" ]]; then
|
|
echo "You must provide the scale as a parameter in terms of Gigabytes, true/false to run queries with EXPLAIN ANALYZE option, true/false to use random distrbution, multi-user count, the number of sql iterations, and the name of the database under test."
|
|
echo "Example: ./rollout.sh 100 false false 5 1 exasol"
|
|
exit 1
|
|
fi
|
|
|
|
step=sql
|
|
init_log $step
|
|
|
|
# Anlegen eines neuen log files für jeden durchgeführten Lauf.
|
|
if [ -f $parentPWD/log/single_run_log.01.txt ]; then
|
|
count=$(ls $parentPWD/log | grep 'single_run_log' | wc -l)
|
|
count=$((count+1))
|
|
if [ "${#count}" == 1 ]; then
|
|
touch $parentPWD/log/single_run_log.0$count.txt
|
|
logfile=$parentPWD/log/single_run_log.0$count.txt
|
|
touch $parentPWD/log/single_run_ressource_log.0$count.txt
|
|
ressourcelogfile=$parentPWD/log/single_run_ressource_log.0$count.txt
|
|
else
|
|
touch $parentPWD/log/single_run_log.$count.txt
|
|
logfile=$parentPWD/log/single_run_log.$count.txt
|
|
touch $parentPWD/log/single_run_ressource_log.$count.txt
|
|
ressourcelogfile=$parentPWD/log/single_run_ressource_log.$count.txt
|
|
fi
|
|
else
|
|
touch $parentPWD/log/single_run_log.01.txt
|
|
logfile=$parentPWD/log/single_run_log.01.txt
|
|
touch $parentPWD/log/single_run_ressource_log.01.txt
|
|
ressourcelogfile=$parentPWD/log/single_run_ressource_log.01.txt
|
|
fi
|
|
|
|
# Logging der beanspruchten Ressourcen. Pid wird benutzt um später den Prozess beenden zu können. top -b -d 1
|
|
logging_pid=$(docker stats > $ressourcelogfile & echo $!)
|
|
touch $parentPWD/log/single_user_runtime.txt
|
|
TOTAL_START=$(date +%s%N)
|
|
# Einzelnes Ausführen der Queries und loggen der benötigten Zeit.
|
|
if [ "$VERSION" == "postgresql" ] || [ "$VERSION" == "gpdb" ]; then
|
|
for x in $(seq 1 $SINGLE_USER_ITERATIONS); do
|
|
for i in $(ls $PWD/*.tpch.*.sql); do
|
|
id=`echo $i | awk -F '.' '{print $3}'`
|
|
start_log
|
|
echo "Executing query $id"
|
|
STARTTIME=$(date +%s%N)
|
|
psql -h localhost -p 5439 -U p -d benchmark -v ON_ERROR_STOP=1 -A -q -t -P pager=off -f $i >> $logfile
|
|
ENDTIME=$(date +%s%N)
|
|
echo "It takes $((($ENDTIME - $STARTTIME)/1000000)) milliseconds to complete task $id." >> $logfile
|
|
echo "Elapsed: $((($ENDTIME - $STARTTIME)/1000000))" >> $logfile
|
|
|
|
done
|
|
done
|
|
elif [ "$VERSION" == "exasol" ]; then
|
|
for x in $(seq 1 $SINGLE_USER_ITERATIONS); do
|
|
for i in $(ls $PWD/*.tpch.*.sql); do
|
|
id=`echo $i | awk -F '.' '{print $3}'`
|
|
start_log
|
|
echo "Executing query $id"
|
|
STARTTIME=$(date +%s%N)
|
|
$parentPWD/EXAplus-7.1.2/exaplus -c localhost/$UTIL:8563 -u sys -p exasol -q -f $i >> $logfile
|
|
ENDTIME=$(date +%s%N)
|
|
echo "It takes $((($ENDTIME - $STARTTIME)/1000000)) milliseconds to complete task $id." >> $logfile
|
|
echo "Elapsed: $((($ENDTIME - $STARTTIME)/1000000))" >> $logfile
|
|
done
|
|
done
|
|
elif [ "$VERSION" == "ignite" ]; then
|
|
for x in $(seq 1 $SINGLE_USER_ITERATIONS); do
|
|
for i in $(ls $PWD/*.tpch.*.sql); do
|
|
id=`echo $i | awk -F '.' '{print $3}'`
|
|
# ignite can't use views and can't execute transformed query either
|
|
if [ $id == 13 ] || [ $id == 16 ] || [ $id == 19 ] || [ $id == 20 ] || [ $id == 22 ]; then
|
|
echo "skip $id"
|
|
else
|
|
start_log
|
|
echo "Executing query $id"
|
|
STARTTIME=$(date +%s%N)
|
|
source $PWD/../apache-ignite-2.11.0-bin/bin/sqlline.sh -u jdbc:ignite:thin://127.0.0.1/ -n ignite -p ignite --run=$i >> $logfile
|
|
ENDTIME=$(date +%s%N)
|
|
echo "It takes $((($ENDTIME - $STARTTIME)/1000000)) milliseconds to complete task $id." >> $logfile
|
|
echo "Elapsed: $((($ENDTIME - $STARTTIME)/1000000))" >> $logfile
|
|
fi
|
|
done
|
|
done
|
|
elif [ "$VERSION" == "cratedb" ]; then
|
|
# Bei den CrateDB queries wurden jeweils ein Limit eingebaut, da bei langen Ergebnissen das Ausgeben sehr lange dauert.
|
|
for x in $(seq 1 $SINGLE_USER_ITERATIONS); do
|
|
for i in $(ls $PWD/*.tpch.*.sql); do
|
|
if ! grep -q ::timestamp "$i"; then
|
|
# Einfügen von :: vor timestamp und interval, weil der Query-Generator :: als flag betrachtet zum Einfügen von Werten und diese entfernt.
|
|
# (Es werden keine Werte an diesen Stellen eingefügt, weil noch eine Zahl dahinter fehlt, also ::1, ::2, ...)
|
|
sed -i -- 's/timestamp/::timestamp/g; s/interval/::interval/g' $i
|
|
# Entfernt Kommentar Zeilen (starten mit --), weil CrateDB damit nicht umgehen kann.
|
|
sed -i '/^--/d' $i
|
|
fi
|
|
|
|
id=`echo $i | awk -F '.' '{print $3}'`
|
|
# CrateDB kann nicht mehrere Anweisungen auf einen Schlag ausführen, es müssen drei einzelne Anweisungen für Query 15 abgesetzt werden.
|
|
# 02 syntax
|
|
# 05 nach 30 min abgebrochen
|
|
# 06 nach 30 min abgebrochen
|
|
# 17 kann nicht mit syntax umgehen
|
|
# 19 nach 30 min abgebrochen
|
|
# 20 kann nicht mit syntax umgehen
|
|
# kann nicht mit exists umgehen
|
|
if [ $id == 02 ] || [ $id == 05 ] || [ $id == 07 ] || [ $id == 09 ] || [ $id == 13 ] || [ $id == 17 ] || [ $id == 19 ] || [ $id == 20 ] || [ $id == 21 ]; then
|
|
# || [ $id == 03 ] || [ $id == 10 ] || [ $id == 04 ] || [ $id == 08 ] || [ $id == 12 ] || [ $id == 16 ]; then
|
|
echo "skip $id"
|
|
elif [ $id == 15 ]; then
|
|
start_log
|
|
echo "Executing query $id special"
|
|
query_view=$(cat $i)
|
|
query_query=$(cat $parentPWD/cratedb_query_15/query_15.sql)
|
|
query_delete=$(cat $parentPWD/cratedb_query_15/delete_view_15.sql)
|
|
echo "$query_view"
|
|
echo "$query_query"
|
|
echo "$query_delete"
|
|
STARTTIME=$(date +%s%N)
|
|
$parentPWD/crash-cli/crash --hosts "localhost:$UTIL" -c "$query_view" >> $logfile
|
|
$parentPWD/crash-cli/crash --hosts "localhost:$UTIL" -c "$query_query" >> $logfile
|
|
$parentPWD/crash-cli/crash --hosts "localhost:$UTIL" -c "$query_delete" >> $logfile
|
|
ENDTIME=$(date +%s%N)
|
|
echo "It takes $((($ENDTIME - $STARTTIME)/1000000)) milliseconds to complete task $id." >> $logfile
|
|
echo "Elapsed: $((($ENDTIME - $STARTTIME)/1000000))" >> $logfile
|
|
else
|
|
start_log
|
|
echo "Executing query $id"
|
|
query=$(cat $i)
|
|
echo "$query"
|
|
STARTTIME=$(date +%s%N)
|
|
$parentPWD/crash-cli/crash --hosts "localhost:$UTIL" -c "$query" >> $logfile
|
|
ENDTIME=$(date +%s%N)
|
|
echo "It takes $((($ENDTIME - $STARTTIME)/1000000)) milliseconds to complete task $id." >> $logfile
|
|
echo "Elapsed: $((($ENDTIME - $STARTTIME)/1000000))" >> $logfile
|
|
fi
|
|
done
|
|
done
|
|
elif [ "$VERSION" == "mariadbcs" ]; then
|
|
for x in $(seq 1 $SINGLE_USER_ITERATIONS); do
|
|
for i in $(ls $PWD/*.tpch.*.sql); do
|
|
id=`echo $i | awk -F '.' '{print $3}'`
|
|
start_log
|
|
if [ $id == 02 ] || [ $id == 05 ] || [ $id == 17 ] || [ $id == 19 ]; then
|
|
echo "skip $id"
|
|
else
|
|
echo "Executing query $id"
|
|
STARTTIME=$(date +%s%N)
|
|
mariadb --protocol tcp --host localhost -u nsc --password=mariadbcs < $i >> $logfile
|
|
ENDTIME=$(date +%s%N)
|
|
echo "It takes $((($ENDTIME - $STARTTIME)/1000000)) milliseconds to complete task $id." >> $logfile
|
|
echo "Elapsed: $((($ENDTIME - $STARTTIME)/1000000))" >> $logfile
|
|
fi
|
|
done
|
|
done
|
|
else
|
|
echo "ERROR: Unsupported VERSION $VERSION!"
|
|
exit 1
|
|
fi
|
|
TOTAL_END=$(date +%s%N)
|
|
|
|
echo "It takes $((($TOTAL_END - $TOTAL_START)/1000000)) milliseconds to complete single user run" >> $parentPWD/log/single_user_runtime.txt
|
|
kill -9 $logging_pid
|
|
|
|
end_step $step
|
|
|