- 创建测试用数据库
createdb pg_test
- 初始化
pgbench -i pg_test
- 测试开始
pgbench -c 1 -T 10 -l pg_test
其中- -c 指定几个客户端同时执行测试脚本
- -T 测试持续时间
- -l 指定要输出日志,这个很重要,因为接下来需要用生成的日志来计算单事务执行时间
上一条命令里模拟了一个客户端持续10秒对数据库加负荷。由于我们使用的是默认测试脚本,每个测试事务里面都做了下面这些操作。BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
执行后,会在当前目录下生成日志文件,例如 pgbench_log.12345
里面大概是这个样子的内容4 0 7793 0 1377672368 923621 8 0 9040 0 1377672368 924921 9 0 9708 0 1377672368 925599 4 1 2236 0 1377672368 925907 1 0 10820 0 1377672368 926610
日志的格式是 client_id transaction_no time file_no time_epoch time_us
其中第三个字段就是当前事务的执行时间(毫秒单位)
接下来使用awk来取得日志里面的单事务执行平均时间。awk '{a+=($3/1000)} END{print a/NR}' pgbench_log.12345
然后,改变pgbench命令里面的-c参数继续执行pgbench -c 2 -T 10 -l pg_test
我自己测试了客户端数为1 2 4 6 8 10,事务平均时间大概是这个样子。 客户端数 执行平均时间 1 1.04999
2 1.03188
4 1.21065
6 1.72745
8 2.42782
10 3.43816
另外,还可以用pgbench来模拟高并发场景来做性能测试。不过这个时候就需要自己写事务脚本了。用参数-f
来指定脚本文件。
详细使用方法还是要看官方文档滴pgbench