赞
踩
官方文档:https://www.postgresql.org/docs/14/pgbench.html
pgbench是一个在PostgreSQL上运行基准测试的简单程序。它可以在多个并发数据库会话中一遍又一遍地运行相同的 SQL 命令序列,然后计算平均事务率(每秒事务数)。默认情况下,pgbench测试一个基于 TPC-B 的松散场景,每个事务涉及五个SELECT
、、UPDATE
和INSERT
命令。但是,通过编写自己的事务脚本文件很容易测试其他情况。
1. 创建基准测试环境,会自动创建几个压力测试用的表
pgbench -i [ other-options] dbname[ other-options]:-s 指定要生成测试的数据行数,-F也可以用来指定要增加的测试行数
这个过程会创建下面四个表,并初始化一些数据,提示:如果数据库中有同名的表会被删除
table # of rows --------------------------------- pgbench_branches 1 pgbench_tellers 10 pgbench_accounts 100000 pgbench_history 0
2. 运行压力测试
pgbench [options] dbnam
[options]:压力测试使用最普遍的参数有 -c(客户端数据量), -t(事务数量), -T(时间限制), -f(自定义脚本文件),-S(只运行select)
常用连接参数
- -h hostname 数据库服务器的主机名
- -p port 数据库服务器的端口号
- -U login 要连接的用户名
其他还有
--partition-method=NAME 创建测试表的分区名
--partitions=NUM 分区数
--tablespace=tablespace 在指定表空间创建测试表
-C 为每个事务建立一个新连接,而不是每个客户端会话只做一次。这对于测量连接开销很有用
更多选项及功能参考官网手册。
用例:运行一个时间1分钟200个客户端的压力测试
- postgres@iZuf65mtbjzzl8rj91h713Z:~$ pgbench -c 200 -S -T 60 postgres
- pgbench (14.4 (Ubuntu 14.4-1.pgdg22.04+1))
- starting vacuum...end.
- transaction type: <builtin: select only>
- scaling factor: 1
- query mode: simple
- number of clients: 200
- number of threads: 1
- duration: 60 s
- number of transactions actually processed: 9522096
- latency average = 1.254 ms
- initial connection time = 292.991 ms
- tps = 159475.299732 (without initial connection time)
报告介绍
前六行报告了一些最重要的压测运行参数设置。
number of transactions actually processed n/m:报告已完成和预期的交易数量(后者只是客户数量和每个客户的交易数量的乘积);
latency average:平均延迟
initial connection time:初始连接时间
tps:每秒事务数
实际测试中一般自己构造一个测试的脚本文件,通过-f <文件名>来替换基准测试用的默认脚本。
一个简单的例子:vi test.sql
/set id random(1,100000000)
select * from test where id=:id;
运行
pgbench -c 200 -S -T 60 -f test.sql postgres
更多构造脚本的语法请参考官方手册。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。