pgbench的使用
pgbench是基于tpc-b模型的postgresql测试工具。它属于开源软件,主要为数据管理人员提供性能测试使用。pgbench 是对 PostgreSQL 进行压力测试的一款简单程序, SQL 命令可以在一个连接中顺序地执行,通常会开多个数据库 Session, 并且在测试最后形成测试报告,得出每秒平均事务数,pgbench可以测试 select,update,insert,
pgbench是基于tpc-b模型的postgresql测试工具。它属于开源软件,主要为数据管理人员提供性能测试使用。
pgbench 是对 PostgreSQL 进行压力测试的一款简单程序, SQL 命令可以在一个连接中顺序地
执行,通常会开多个数据库 Session, 并且在测试最后形成测试报告,得出每秒平均事务数,pgbench
可以测试 select,update,insert,delete 命令,用户可以编写自己的脚本进行测试。
安装:
在postgresql安装源包中,进入源码的contrib目录,进入pgbench目录,通过make all ;make install单独安装。
pgbench命令具体参数如下
pgbench [OPTIONS]... [DBNAME]
初始化操作参数如下:
-i 初始化模式
-F NUM fill factor
-s NUM 销售端个数
测试参数:
-c NUM 测试时模拟客户端个数,不指定默认为1
-C 设置为每一个事务建立一个新的连接
-D VARNAME=VALUE
传递测试脚本中变量值
-f FILENAME 测试脚本位置,不指定默认pgbench自带脚本
-j NUM 启动线程数默认为1
-l 定向输出日志文件
-M {simple|extended|prepared}
protocol for submitting queries to server (default: simple)
-n 测试前不执行vacuum操作
-N 不对"pgbench_tellers" 和"pgbench_branches"表进行update操作
-r 在测试结果中显示脚本中每条指令的平均延时
-s NUM 在测试结果中显示销售端个数
-S perform SELECT-only transactions
-t NUM 每个客户端执行事务次数,默认为10
-T NUM 测试时间设置,单位为秒
-v 执行测试前对库中四个基准表进行vacuum操作
命令参数:
-d 在测试过程中输出debug信息
-h HOSTNAME 数据库服务器ip
-p PORT 数据库端口
-U USERNAME 连接数据库用户名
--help 显示命令帮助
--version 输出pgbench版本信息
-F NUM 和 -M {simple|extended|prepared}这两个参数含义不太了解
pgbench测试脚本如下
默认
static char *tpc_b = {
"\\set nbranches :scale\n"
"\\set ntellers 10 * :scale\n"
"\\set naccounts 100000 * :scale\n"
"\\setrandom aid 1 :naccounts\n"
"\\setrandom bid 1 :nbranches\n"
"\\setrandom tid 1 :ntellers\n"
"\\setrandom delta -5000 5000\n"
"BEGIN;\n"
"UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;\n"
"SELECT abalance FROM pgbench_accounts WHERE aid = :aid;\n"
"UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;\n"
"UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;\n"
"INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);\n"
"END;\n"
};
/* -N case */
static char *simple_update = {
"\\set nbranches :scale\n"
"\\set ntellers 10 * :scale\n"
"\\set naccounts 100000 * :scale\n"
"\\setrandom aid 1 :naccounts\n"
"\\setrandom bid 1 :nbranches\n"
"\\setrandom tid 1 :ntellers\n"
"\\setrandom delta -5000 5000\n"
"BEGIN;\n"
"UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;\n"
"SELECT abalance FROM pgbench_accounts WHERE aid = :aid;\n"
"INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);\n"
"END;\n"
};
/* -S case */
static char *select_only = {
"\\set naccounts 100000 * :scale\n"
"\\setrandom aid 1 :naccounts\n"
"SELECT abalance FROM pgbench_accounts WHERE aid = :aid;\n"
};
这些在源码文件夹的pgbench.c中可以看到。我们也可以自己写脚本文件,然后在运行pgbench的时候加参数-f指定脚本。
由此可见,其实pgbench的测试脚本还是很简单的,也有许多局限性。以后我们还会介绍另一个工具——pgbench-tool。它在一定程度上对pgbench进行了完善,虽然他也是调用pgbench。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)