postgresql:pgbench基准性能测试

一、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方式。


请使用浏览器的分享功能分享到微信等