PostgreSQL教程(13)使用pgbench进行基准测试

PostgreSQL教程(13)使用pgbench进行基准测试

pgbench是一款 PostgreSQL 官方自带的数据库性能基准测试工具,可以模拟多用户并发事务,用于评估数据库在不同并发度、数据量和硬件环境下的性能表现。

一、pgbench常用选项

  -i, --initialize:初始化测试数据,会创建pgbench_branches、pgbench_tellers、pgbench_accounts、pgbench_history 4张表和相应的测试数据测试数据,其中pgbench_accounts为主要的测试表,默认有10W条数据

  -s, --scale=NUM:测试数据的规模因子,pgbench 会按照设置的比例对每张表的测试数据进行扩充,如-s 5表示测试数据扩大5倍

  -j, --jobs=NUM:测试时的线程数量,建议与 CPU 核数相当,默认为1

  -c, --client=NUM:测试时的客户端数量,即并发数量,默认为1

  -t, --transactions=NUM:测试过程中每个客户端执行的事务数量,可以精确控制事务数,常用于比较两个配置下的性能,默认为10

  -T, --time=NUM:测试时长,单位为秒,如果指定了-T没有指定-t,每个客户端会尽可能多的执行事务,直到达到测试时长

  -b, --builtin=NAME[@W]:增加一个内置测试脚本并设置权重,如果使用-b list则是输出当前已经添加好的内置脚本,默认有tpc-b、delete、insert、select-only、simple-update。如 pgbench -b select-only@3 -b simple-update@1 testdb代表压测中有75%为查询, 25%为写入

  -P, --progress=NUM:每隔多少秒输出一次测试进度

  -f, --file=FILENAME[@W]:使用自定义脚本进行压测

  -h, --host=HOSTNAME:指定测试数据库地址,通常远程测试或者多实例使用

  -p, --port=PORT:指定测试数据库端口,通常远程测试或者多实例使用

  -U, --username=USERNAME:指定测试数据库用户名,通常远程测试或者多实例使用

  --random-seed=SEED:固定随机种子,保证可重复性测试

二、pgbench 压测步骤

1、在进行压测前需要提前建好用于测试的数据库,pgbench会在指定的库中创建测试数据

createdb testdb


2、初始化数据

pgbench -i -s 10 -q testdb


3、中等并发性能测试

pgbench -c 10 -j 2 -T 120 -r -P 5 testdb


4、读写混合负载测试

pgbench -c 100 -j 16 -T 300 -b select-only@3 -b simple-update@1 testdb


5、自定义业务逻辑压测

pgbench -c 20 -j 4 -T 60 -f /tmp/mytest.sql -r -P 5 testdb


三、pgbench测试报告

# 以下报告为中等并发性能测试pgbench -c 10 -j 2 -T 120 -r -P 5 testdb的结果
-bash-4.2$ pgbench -c 10 -j 2 -T 60 -r -P 5 pgbench
pgbench (16.10)                                #pgbench版本号
starting vacuum...end.                         #压测前进行vacuum,确保统计信息和可用空间正常
progress: 5.0 s, 1737.1 tps, lat 5.714 ms stddev 2.067, 0 failed       #因为使用了-P 5,这里就会每5秒的实时性能输出
progress: 10.0 s, 1359.5 tps, lat 7.350 ms stddev 43.543, 0 failed     #平均每秒执行1359个事务,每个事务平均耗时 7.35 ms,延迟变高,无失败
progress: 15.0 s, 1758.4 tps, lat 5.685 ms stddev 2.588, 0 failed
progress: 20.0 s, 1642.0 tps, lat 6.085 ms stddev 3.248, 0 failed
progress: 25.0 s, 1771.0 tps, lat 5.645 ms stddev 2.272, 0 failed
progress: 30.0 s, 1747.4 tps, lat 5.718 ms stddev 2.490, 0 failed
progress: 35.0 s, 1738.9 tps, lat 5.748 ms stddev 2.573, 0 failed
progress: 40.0 s, 1738.1 tps, lat 5.748 ms stddev 2.480, 0 failed
progress: 45.0 s, 1702.2 tps, lat 5.872 ms stddev 3.050, 0 failed
progress: 50.0 s, 1603.8 tps, lat 6.230 ms stddev 3.293, 0 failed
progress: 55.0 s, 1604.0 tps, lat 6.227 ms stddev 10.626, 0 failed    
progress: 60.0 s, 1702.2 tps, lat 5.876 ms stddev 2.911, 0 failed
transaction type: <builtin: TPC-B (sort of)>    #使用 pgbench 内置的 TPC-B 模拟场景
scaling factor: 10    #数据规模,即-s指定的系数,每张表大约有 100,000×10=1,000,000 条记录
query mode: simple
number of clients: 10    #客户端数量
number of threads: 2     #线程数量
maximum number of tries: 1
duration: 60 s            #测试时长 
number of transactions actually processed: 100531    #总共完成事务数
number of failed transactions: 0 (0.000%)    #失败事务数
latency average = 5.962 ms    #每个事务平均耗时
latency stddev = 11.987 ms    #延迟标准差,如果很大证明有波动
initial connection time = 33.163 ms
tps = 1676.002232 (without initial connection time)    #测试总体吞吐量,每秒完成约 1676 个事务
statement latencies in milliseconds and failures:    #各语句延迟分析,更新pgbench_branches表的延迟最高
         0.002           0  \set aid random(1, 100000 * :scale)
         0.001           0  \set bid random(1, 1 * :scale)
         0.001           0  \set tid random(1, 10 * :scale)
         0.001           0  \set delta random(-5000, 5000)
         0.425           0  BEGIN;
         0.394           0  UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
         0.819           0  SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
         0.817           0  UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
         1.426           0  UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
         0.612           0  INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
         1.466           0  END;


文章评论

猜你喜欢

MySQL | Oracle Oracle教程(4)快照与AWR报告

Oracle教程(4)快照与AWR报告
Oracle教程(4)快照与AWR报告
Oracle教程(4)快照与AWR报告
Oracle教程(4)快照与AWR报告

一、Oracle 快照Oracle中的快照(Snapshot)是指数据库在某个时间点对性能相关的数据做的一次全量采集。包括:系统资源使用情况、Top SQL、IO 性能指标、SGA、PGA 使用情况。...

Oracle教程(3)Schema、用户与表空间

MySQL | Oracle Oracle教程(3)Schema、用户与表空间

在完成 Oracle安装后,登录数据库实例可以看到有很多的模式(Schema),这些模式都是为了支持数据库核心组件、特性扩展、管理任务或者示例而创建,对于这部分默认模式,通常不需要进行操作。在生产规范...

Oracle教程(2)Oracle19C命令行静默安装教程

MySQL | Oracle Oracle教程(2)Oracle19C命令行静默安装教程

在部分生产环境下可能并不支持通过图形化方式来安装Oracle数据库(比如需要脚本一键安装的场景),所以还需要了解通过命令行静默安装的方式来完整数据库的安装,以下是详细步骤一、系统环境配置部分1、确定内...

MySQL | Oracle Oracle教程(1)Oracle19C图形化安装详细教程

Oracle教程(1)Oracle19C图形化安装详细教程
Oracle教程(1)Oracle19C图形化安装详细教程
Oracle教程(1)Oracle19C图形化安装详细教程
Oracle教程(1)Oracle19C图形化安装详细教程

一、Oracle数据库版本说明Oracle作为最出名的商业数据库,其特点是可用性强、扩展性强、安全性强、稳定性强。相比MySQL,更适合高并发的业务。从18c版本开始,Oracle采用年份来对版本进行...

MySQL教程(11)物理备份工具Xtrabackup使用教程

MySQL | Oracle MySQL教程(11)物理备份工具Xtrabackup使用教程

一、Xtrabackup 介绍Xtrabackup是Percona出品的一款针对MySQL的物理备份工具。物理备份通常是指直接对数据文件、日志文件、配置文件等对象直接进行复制的一种备份方法。...