os: centos 7.4
db: postgresql 9.6
pgbench-tools 实在搜索 pgbench 时发现,特意实践了一把。
都是4、5年前的更新了,估计作者已经放弃维护了。
# yum install gnuplot python python-devel python-dateutil
# su - postgres
$ git clone https://github.com/gregs1104/pgbench-tools.git
由于 pgbench-tools 已经很久很久没有更新,当前的psql已经不支持 \setrandom
需要修改的文件主要是在tests目录下, 可以参考以下调整:
\set nbranches 1 * :scale
\set ntellers 10 * :scale
\set naccounts 100000 * :scale
\setrandom aid 1 :naccounts
\setrandom bid 1 :nbranches
\setrandom tid 1 :ntellers
\setrandom delta -5000 5000
调整为
\set nbranches 1 * :scale
\set ntellers 10 * :scale
\set naccounts 100000 * :scale
\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
$ createdb results
$ createdb pgbench
$ cd pgbench-tools
$ psql -f init/resultdb.sql -d results
$ ./newset 'Initial Config'
$ ./runset
$ psql -d results -f reports/report.sql
也可用使用下面不同的类型
$ psql -d results -f reports/fastest.sql
$ psql -d results -f reports/summary.sql
$ psql -d results -f reports/bufreport.sql
$ psql -d results -f reports/bufsummary.sql
如有必要,可以手动运行页面效果
$ ./webreport
$ cd results
$ psql -d results -At -c "SELECT test FROM tests WHERE tps=0" | xargs rm -rf
$ psql -d results -At -c "DELETE FROM tests WHERE tps=0"
$ ./webreport
$ vi config
SCRIPT="select.sql"
SCALES="1 10 100 1000"
SETCLIENTS="1 2 4 8 16 32"
SETTIMES=3
可以调整为
SCRIPT="select.sql"
SCALES="1 10 100 1000"
SETCLIENTS="1 2 4 8 16 32 64 128 256"
SETTIMES=3
默认的 SCRIPT=“select.sql” 是使用 ./tests/select.sql
config 文件里保存了测试用例脚本,测试数据量,测试时间等,可以根据需要调整
在 pgbench-tools 文件夹下生成多个 config 文件,对应不同的测试选项。
$ls -l |grep -i config
-rwxr-xr-x 1 postgres postgres 1677 Dec 5 11:40 config
-rwxr-xr-x 1 postgres postgres 1647 Dec 5 09:44 config.bak
-rwxr-xr-x 1 postgres postgres 1677 Dec 5 11:31 config.insert
-rwxr-xr-x 1 postgres postgres 1679 Dec 5 11:32 config.nobranch
-rwxr-xr-x 1 postgres postgres 1677 Dec 5 11:31 config.select
-rwxr-xr-x 1 postgres postgres 1676 Dec 5 11:32 config.tpc-b
-rwxr-xr-x 1 postgres postgres 1677 Dec 5 11:31 config.update
主要调整 SCRIPT 这个变量值
SCRIPT="select.sql"
下面这三个值保持一致
SCALES="1 10 100 1000"
SETCLIENTS="1 2 4 8 16 32 64 128 256"
SETTIMES=3
shell 脚本
#!/bin/bash
cd /var/lib/postgresql/pgbench-tools
cp ./config.bak ./config
source ./config
rm -rf $BASEDIR/results*
DROPDBSQL="/usr/bin/dropdb --if-exists "
CREATEDBSQL="/usr/bin/createdb "
RESULTPSQL="/usr/bin/psql -d $RESULTDB "
print() {
msg=$1
echo -ne "[`date`]${msg}\n"
}
execute() {
cmd=$1
param=$2
print "[$FUNCNAME:$LINENO BEGIN] $cmd $param"
$cmd $param
[ "$?" -ne 0 ] && {
print "execute command:$cmd $param FAILED!!!" $red
exit 1
}
print "[$FUNCNAME:$LINENO END] $cmd $param"
}
init_drop_db() {
execute "$DROPDBSQL" "$TESTDB"
execute "$DROPDBSQL" "$RESULTDB"
}
init_create_db() {
execute "$CREATEDBSQL" "$TESTDB"
execute "$CREATEDBSQL" "$RESULTDB"
}
init_table() {
$RESULTPSQL -f $BASEDIR/init/resultdb.sql
}
init_set() {
cd $BASEDIR
./newset $1
}
run_set() {
cd $BASEDIR
./runset
}
echo "#################################################"
echo "### set insert"
echo "### ./tests/insert.sql"
echo "#################################################"
init_drop_db
init_create_db
init_table
rm -f $BASEDIR/config
cp $BASEDIR/config.insert $BASEDIR/config
mkdir $BASEDIR/results
init_set insert
run_set
mv $BASEDIR/results $BASEDIR/results.insert
echo "#################################################"
echo "### set select"
echo "### ./tests/select.sql"
echo "#################################################"
init_drop_db
init_create_db
init_table
rm -f $BASEDIR/config
cp $BASEDIR/config.select $BASEDIR/config
mkdir $BASEDIR/results
init_set select
run_set
mv $BASEDIR/results $BASEDIR/results.select
echo "#################################################"
echo "### set update"
echo "### ./tests/update.sql"
echo "#################################################"
init_drop_db
init_create_db
init_table
rm -f $BASEDIR/config
cp $BASEDIR/config.update $BASEDIR/config
mkdir $BASEDIR/results
init_set update
run_set
mv $BASEDIR/results $BASEDIR/results.update
echo "#################################################"
echo "### set nobranch"
echo "### ./tests/nobranch.sql"
echo "#################################################"
init_drop_db
init_create_db
init_table
rm -f $BASEDIR/config
cp $BASEDIR/config.nobranch $BASEDIR/config
mkdir $BASEDIR/results
init_set nobranch
run_set
mv $BASEDIR/results $BASEDIR/results.nobranch
echo "#################################################"
echo "### set tpc-b"
echo "### ./tests/tpc-b.sql"
echo "#################################################"
init_drop_db
init_create_db
init_table
rm -f $BASEDIR/config
cp $BASEDIR/config.tpc-b $BASEDIR/config
mkdir $BASEDIR/results
init_set tpc-b
run_set
mv $BASEDIR/results $BASEDIR/results.tpc-b
shell 脚本主要参考了 https://yq.aliyun.com/articles/197
参考:
https://github.com/gregs1104/pgbench-tools
https://git.postgresql.org/gitweb/
https://git.postgresql.org/gitweb/?p=pgbench-tools.git;a=summary
https://yq.aliyun.com/articles/197