1、安装pgbench
yum install postgresql10-contrib
2、初始化pgbench使用的库
首先将shell切换到postgres用户下,使用psql新建一个测试用的数据库pgbench。
postgres=# CREATE DATABASE pgbench; CREATE DATABASE postgres=# \q
然后执行如下命令初始化pgbench库
# pgbench -i [option...] [dbname] pgbench -i pgbench
默认会在pgbench库中初始化四张表:
table # of rows --------------------------------- pgbench_branches 1 pgbench_tellers 10 pgbench_accounts 100000 pgbench_history 0
初始数据只有10万行,我们可以使用-s参数增加初始化时候的数据量
pgbench -i pgbench -s 100
3、使用默认的测试脚本
完成了测试库的初始化后,就可以使用不加-i参数的pgbench命令进行测试了。
# pgbench [options] dbname pgbench pgbench
结果输出如下:
starting vacuum 表示清理缓存
transaction type 表示测试用的事务脚本类型(TPC-B measures throughput in terms of how many transactions per second a system can perform,TPC-B类型表示测试每秒处理事务个数)
scaling factor 表示比例因子,使用pgbench内建测试脚本的时候不需要理会该参数
query mode 表示查询协议,我也不知道什么意思=。=
number of clients 表示客户端数量
number of threads 表示工作线程数量
number of transactions per client 表示每个客户端执行的测试事务数量
number of transations actually processed 表示实际执行完成的事务数量(= 客户端数 * 每客户端执行事务数)
tps 表示每秒能处理多少个事务(transactions per second)
3.1 参数
-c clients 模拟客户端的数量,也就是并发数据库会话的数量。缺省是1。 -C 为每个事务建立一个新的连接,而不是每客户端会话只执行一次。 这对于测量连接开销是有用的。 -d 打印调试输出。 -D varname=value 定义一个自定义脚本使用的变量(见下文)。允许使用多个-D选项。 -f filename 从filename中读取事务脚本,而不使用内建事务脚本。见下文获取细节。 -N、-S、和-f是互相排斥的。 -j threads pgbench中工作线程的数量。在多CPU的机器上使用多个线程会很有帮助。 客户端的数量必须是线程数量的倍数,因为每个线程都有相同数量的客户端会话管理。 缺省是1。 -l 记录每个事务写入日志文件的时间。见下文获取细节。 -M querymode 提交查询到服务器使用的协议: simple:使用简单的查询协议。 extended:使用扩展的查询协议。 prepared:使用带有预备语句的扩展查询协议。 缺省是简单的查询协议。(参阅第 48 章获取更多信息。) -n 运行测试时不执行清理。如果你正在运行一个不包含标准表pgbench_accounts、 pgbench_branches、pgbench_history、和 pgbench_tellers的自定义测试,那么该选项是必需的。 -N 不要更新pgbench_tellers和pgbench_branches。 这将避免争用这些表,但是它使得测试用例更不像TPC-B。 -r 在benchmark完成后报告每个命令的平均每语句延迟(从客户的角度看的执行时间)。 见下文获取细节。 -s scale_factor 在pgbench的输出中报告指定的比例因子。在内建的测试中,这不是必需的; 正确的比例因子将通过计数pgbench_branches表中的行数检测到。 不过,在测试自定义benchmark(-f选项)时,比例因子将报告为1,除非使用了该选项。 -S 执行只有select的事务,替代类似TPC-B的测试。 -t transactions 每个客户端运行的事务数量。缺省是10。 -T seconds 运行测试这么多秒,而不是每客户端固定数量的事务。-t 和-T是互相排斥的。 -v 在运行测试之前清理四个标准表。既不用-n也不用-v, pgbench将清理pgbench_tellers和pgbench_branches表, 截断pgbench_history表。 --aggregate-interval=seconds 汇总时间间隔的长度(以秒计)。可能只与-l选项一起使用, 日志包含每间隔的总结(事务的数量、最小/最大延迟和可用于方差估计的两个额外字段)。 目前在Windows上不支持这个选项。 --sampling-rate=rate 采样率,在写入数据到日志时使用,以减少生成日志的数量。如果给出了这个选项, 则只记录指定比例的事务。1.0意味着记录所有事务,0.05意味着只记录了5%的事务。 在处理日志文件时记得计算上采样率。例如,计算tps值时,需要乘以相应的数字 (比如,0.01的采样率,将只得到1/100的实际tps)。
# 测试10w个事务 pgbench pgbench -t 100000 # 测试300秒 pgbench pgbench -T 300
3.2 默认的事务脚本
pgbench默认使用内建的事务脚本进行测试,每个事务包括如下七个命令:
1. BEGIN; 2. UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; 3. SELECT abalance FROM pgbench_accounts WHERE aid = :aid; 4. UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; 5. UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; 6. INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); 7. END;
如果你声明了-N,那么不包含步骤4和5。如果你声明了-S, 那么只发出SELECT。