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 快照Oracle中的快照(Snapshot)是指数据库在某个时间点对性能相关的数据做的一次全量采集。包括:系统资源使用情况、Top SQL、IO 性能指标、SGA、PGA 使用情况。...
MySQL | Oracle Oracle教程(3)Schema、用户与表空间
在完成 Oracle安装后,登录数据库实例可以看到有很多的模式(Schema),这些模式都是为了支持数据库核心组件、特性扩展、管理任务或者示例而创建,对于这部分默认模式,通常不需要进行操作。在生产规范...
MySQL | Oracle Oracle教程(2)Oracle19C命令行静默安装教程
在部分生产环境下可能并不支持通过图形化方式来安装Oracle数据库(比如需要脚本一键安装的场景),所以还需要了解通过命令行静默安装的方式来完整数据库的安装,以下是详细步骤一、系统环境配置部分1、确定内...
MySQL | Oracle Oracle教程(1)Oracle19C图形化安装详细教程
一、Oracle数据库版本说明Oracle作为最出名的商业数据库,其特点是可用性强、扩展性强、安全性强、稳定性强。相比MySQL,更适合高并发的业务。从18c版本开始,Oracle采用年份来对版本进行...
MySQL | Oracle MySQL教程(11)物理备份工具Xtrabackup使用教程
一、Xtrabackup 介绍Xtrabackup是Percona出品的一款针对MySQL的物理备份工具。物理备份通常是指直接对数据文件、日志文件、配置文件等对象直接进行复制的一种备份方法。...
文章评论