How to use pgbench to test performance for PostgreSQL?
pgbench
是一个用于测试 PostgreSQL 数据库性能的基准测试工具。通过模拟多个客户端并发执行 SQL 查询,它可以帮助你评估数据库的性能。以下是使用 pgbench
的基本步骤:
安装 pgbench
pgbench
是 PostgreSQL 的一部分,因此在安装 PostgreSQL 时通常也会包含它。在大多数 Linux 发行版上,你可以通过包管理器安装 PostgreSQL:
# 对于 Ubuntu/Debian 系统
sudo apt-get install postgresql-contrib
# 对于 CentOS/RHEL 系统
sudo yum install postgresql-contrib
基本用法
-
初始化测试数据库:首先,必须初始化一个测试数据库。在进行这个步骤之前,请确保数据库服务器正在运行,并且你具有足够的权限创建数据库。
export PGPASSWORD='<dbpassword>' pgbench -i -s <scaling factor> -h <server_ip> -p <port> -U <username> -d <dbname> 例如: export PGPASSWORD='pgbench' pgbench -i -s 10 -h 192.168.0.1 -p 5432 -U pgbench -d pgbench_test
-
运行基准测试:初始化后,可以运行基准测试。以下是一些常用选项:
export PGPASSWORD='<dbpassword>' pgbench -h <server_ip> -p <port> -U <username> -d <dbname> -c 10 -j 2 -T 60 例如: export PGPASSWORD='pgbench' pgbench -h 192.168.0.1 -p 5432 -U pgbench -d pgbench_test -c 10 -j 2 -T 60 -h <server_ip>:服务器 A 的 IP 地址。 -p <port>:PostgreSQL 服务器的端口号(默认是 5432)。 -U <username>:连接到数据库的用户名。 -d <dbname>:数据库名称。 -c 10:使用 10 个客户端。 -j 2:使用 2 个线程。 -T 60:测试运行时间为 60 秒。
示例输出
-
运行
pgbench
命令后,类似的输出信息如下:starting vacuum...end. transaction type: TPC-B (sort of) scaling factor: 10 query mode: simple number of clients: 10 number of threads: 2 duration: 60 s number of transactions actually processed: 28290 latency average = 21.230 ms latency stddev = 3.119 ms initial connection time = 1.506 ms tps = 471.200 (without initial connection time) transaction type: 测试使用的事务类型,通常是 TPC-B 风格的基准测试。 scaling factor: 数据的规模因子。在初始化数据库时使用的,影响了数据集的大小。 query mode: 查询模式(simple 或 extended)。 number of clients: 模拟的客户端数量。决定了并发加载的水平。 number of threads: 使用的线程数。线程数可以优化性能,尤其在多核机器上。 duration: 测试的运行时间(秒)。 number of transactions actually processed: 实际处理的事务总数。 latency average: 每个事务的平均延迟时间(毫秒)。延迟时间越低,性能越好。 latency stddev: 延迟时间的标准差,反映出延迟的波动性或一致性。 initial connection time: 测试开始时与数据库的初始连接时间。 tps (transactions per second): 每秒事务数,不包含初始连接时间。在评估数据库的事务处理能力时,TPS 是一个重要指标,数值越高表示性能越好。
注意事项
-
TPS (事务处理能力) 是非常重要的指标。通常希望在负载增加时 TPS 能够线性增加。如果 TPS 随着负载增加而下降,则可能存在瓶颈。
-
延迟 (Latency) 也需要关注,尤其在需要低延迟的应用中。
-
如果需要产生更详细的分析(如 per-client latency 报告),可使用
--progress
选项来获取按间隔时间的中间统计数据。也可以选用--log
选项使pgbench
保存详细日志以供进一步分析。