压测 tpcb pgbench 之三 pgbench-tools

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

修改 config

$ 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

你可能感兴趣的:(#,postgresql,tool)