一、pgbench介绍
pgbench -- 在PostgreSQL上运行一个基准测试
pgbench是一种在PostgreSQL上运行基准测试的简单程序。它可能在并发的数据库会话中一遍一遍地运行相同序列的 SQL 命令,并且计算平均事务率(每秒的事务数)。默认情况下,pgbench会测试一种基于 TPC-B 但是要更宽松的场景,其中在每个事务中涉及五个 SELECT 、 UPDATE 以及 INSERT 命令。但是,通过编写自己的事务脚本文件很容易用来测试其他情况。
pgbench的典型输出像这样:
transaction type:
scaling factor: 10
query mode: simple
number of clients: 10
number of threads: 1
number of transactions per client: 1000
number of transactions actually processed: 10000/10000
tps = 85.184871 (including connections establishing)
tps = 85.296346 (excluding connections establishing)
前六行报告一些最重要的参数设置。接下来的行报告完成的事务数以及预期的事务数(后者就是客户端数量与每个客户端事务数的乘积),除非运行在完成之前失败,这些值应该是相等的(在
-T
模式中,只有实际的事务数会被打印出来)。最后两行报告每秒的事务数,分别代表包括和不包括开始数据库会话所花时间的情况。
二、pg基准测试过程
pgbench初始化测试库
pgbench -i会创建四个表pgbench_accounts、 pgbench_branches、pgbench_history以及pgbench_tellers,如果同名表已经存在会被先删除。如果你已经有同名表,一定注意要使用另一个数据库!
pgbench -i -s 1000 postgres -Ut_user
在默认的情况下 "比例因子" 为 1,这些表初始包含的行数为:
table # of rows
---------------------------------
pgbench_branches 1
pgbench_tellers 10
pgbench_accounts 100000
pgbench_history 0
#32个并发32个线程
pgbench -Ut_user -M prepared -r -P 1 -c 32 -j 32 -T 300 postgres
#64个并发64个线程
pgbench -Ut_user -M prepared -r -P 1 -c 64 -j 64 -T 300 postgres
#100个并发100个线程
pgbench -Ut_user -M prepared -r -P 1 -c 100 -j 100 -T 300 postgres
#200个并发200个线程
pgbench -Ut_user -M prepared -r -P 1 -c 200 -j 200 -T 300 postgres
三、测试结果
经过5轮场景测试结果反应不理想,事务延迟较高,200个并发用户磁盘读等待8ms,导致TPS上不去,IO等待原因可能是存储性能瓶颈。主机侧反馈当前存储采用的RAID5,导致存储性能下降。常规数据库使用的存储raid都采用的raid10,建议调整存储的raid方式。