pgbench
是一个用于在 PostgreSQL 上运行基准测试的核心实用程序。
pgbench
添加于 PostgreSQL 7.0。
用法
pgbench
能够生成一组示例数据,并对这些数据运行一组默认查询(大致基于 TPC-B);或者,可以执行用户提供的自定义脚本。
默认数据和查询
如果使用内置的基准测试功能,则需要执行两次 pgbench
,一次初始化数据,一次运行基准测试查询。
初始化步骤使用 pgbench
执行;将创建四个表(默认情况下将删除名称相同的现有表)。其中三个表将预填充生成的数据;数据量由 -i
-s
/--scale
选项控制(默认值:1
)。下表显示了生成的表以及在不同比例因子下插入的行数
1 |
10 |
100 |
|
pgbench_branches |
1 |
10 |
100 |
pgbench_tellers |
10 |
100 |
1,000 |
pgbench_accounts |
100,000 |
1,000,000 |
10,000,000 |
pgbench_history |
0 |
0 |
0 |
默认情况下,行作为客户端生成的单个 INSERT
语句插入。如果选项 -I
/--init-steps
包含 G
标志,则将使用 generate_series()
创建数据。
生成数据后,可以第二次执行 pgbench
以多次运行内置的类似 TPC-B 的事务。每个事务运行以下命令:
\set aid random(1, 100000 * :scale) \set bid random(1, 1 * :scale) \set tid random(1, 10 * :scale) \set delta random(-5000, 5000) 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;
更改历史记录
开发中
- PostgreSQL 17
- PostgreSQL 15
- PostgreSQL 14
- PostgreSQL 13
- PostgreSQL 12
- PostgreSQL 11
- 主要脚本语言改进(提交 bc7fa0c1)
- 添加了
pow()
/power()
函数(提交 7a727c18) - 添加了
\if
支持(提交 f67b113a) - 允许在变量名中使用非 ASCII 字符(提交 9d36a386)
- 添加了哈希函数
hash()
、hash_murmur2()
和hash_fnv1a()
(提交 e51a0484) - 添加了
random_zipfian()
函数(提交 1fcd0ade) - 添加了选项
--init-steps
(提交 591c504f) - 添加了选项
--random-seed
(提交 64f85894) - 使用
--latency-limit
和--rate
生成的统计信息的准确性得到改进(提交 c23bb6ba 和 16827d44)
- PostgreSQL 9.5
- PostgreSQL 9.4
- PostgreSQL 9.3
- PostgreSQL 9.2
- PostgreSQL 8.4
- PostgreSQL 8.3
- 删除了选项
-P
(提交 4192f2d8)
- 删除了选项
- PostgreSQL 7.0
- 作为 contrib 模块 添加(提交 a765db40)。
示例
默认测试
pgbench
提供的默认测试需要将一组示例表和数据安装到目标数据库中;这可以通过以下命令完成:
pgbench -i [other-options
]dbname
其中 other-options
应包含 连接参数,这些参数与 psql 和其他基于 libpq 的客户端使用的参数相同。
再次执行 pgbench
而不使用 -i
选项将导致执行基本测试,例如:
postgres:~$ pgbench -U postgres testdb starting vacuum...end. transaction type: TPC-B (sort of) scaling factor: 1 query mode: simple number of clients: 1 number of threads: 1 number of transactions per client: 10 number of transactions actually processed: 10/10 tps = 108.049703 (including connections establishing) tps = 110.750557 (excluding connections establishing)
默认选项不会提供特别有用的输出;调整 pgbench
最有用的选项是:
-c
(客户端数量)-t
(事务数量)-T
(时间限制)
参考文献
- PostgreSQL 文档: pgbench
有用链接
- PostgreSQL 社区维基: Pgbench