您的位置:首页 > 数据库

pgbench 获取事务执行平均时间

2013-08-28 00:00 148 查看
创建测试用数据库
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息