pgbench 获取事务执行平均时间

  • 创建测试用数据库 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

转载于:https://my.oschina.net/shuizeiguohe/blog/157525

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值