# 一、简介 pgbench 是一个简单的给 PostgreSQL 做性能测试的程序。它反复运行同样的 SQL 命令序列,可能是在多个并发数据库会话上头,然后检查平均的事务速度(每秒的事务数 tps)。缺省的时候,pgbench 测试一个(松散的)接近 TPC-B 的情况,每个事务包括五个 SELECT,UPDATE,和 INSERT命令。不过,我们可以很轻松地使用自己的事务脚本文件来实现其它情况。 # 二、用法 ## 获取帮助 ```bash pgbench --help ``` ## 初始化数据据 ```bash [yz@localhost ~]$ createdb -p 7404 pgbench [yz@localhost ~]$ pgbench -p 7404 -i pgbench ``` ## 编写测试脚本 ``` [yz@localhost ~]$ cat ./pgbench.sql select count(*) from pgbench_accounts; ``` ## 执行测试 执行测试后会显示本次测试统计报告: ```bash [yz@localhost ~]$ pgbench -p 7404 -c 10 -t 300 pgbench -r -f ./pgbench.sql pgbench (14.1) starting vacuum...end. transaction type: test/pgbench.sql scaling factor: 1 query mode: simple number of clients: 10 number of threads: 1 number of transactions per client: 300 number of transactions actually processed: 3000/3000 latency average = 21.316 ms initial connection time = 15.258 ms tps = 469.132490 (without initial connection time) statement latencies in milliseconds: 19.980 select count(*) from pgbench_accounts; ``` # 三、源码 pgbench的源码在PostgreSQL源码目录下: ``` src/bin/pgbench/ ``` 有自己的语法解析,因此对于“元命令”的支持与psql有差异,仅支持少部分“元命令”: ```c typedef enum MetaCommand { META_NONE, /* not a known meta-command */ META_SET, /* \set */ META_SETSHELL, /* \setshell */ META_SHELL, /* \shell */ META_SLEEP, /* \sleep */ META_GSET, /* \gset */ META_ASET, /* \aset */ META_IF, /* \if */ META_ELIF, /* \elif */ META_ELSE, /* \else */ META_ENDIF, /* \endif */ META_STARTPIPELINE, /* \startpipeline */ META_ENDPIPELINE /* \endpipeline */ } MetaCommand; ``` # 四、参考 * [pgbench - PostgreSQL 客户端应用](http://www.postgres.cn/docs/14/pgbench.html) * [PostgreSQL测试工具PGbench](https://developer.aliyun.com/article/25812)