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 <br />8 0 9040 0 1377672368 924921 <br />9 0 9708 0 1377672368 925599 <br />4 1 2236 0 1377672368 925907 <br />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

你可能感兴趣的:(PostgreSQL,性能测试,pgbench)