引言
前几天,突然就接到领导的通知,XXX项目准备要上线了,因此要对正式库进行压测一下。我听到这里是很懵逼的,压测?我哪会儿那玩意儿啊!
但是呢,没办法,这就跟天有不测风云一样,轮到你的时候,你躲是躲不过去的,只能被迫选择接受。因此,我就开始了在网上狂刷压测的文章,也恰巧之前有加过一个DBA前辈的微信,更巧的是这位DBA前辈在前段时间发过一篇关于压测的公众号,而我也撇了几眼,就这样顺理成章的有了本篇的内容。
介绍
Swingbench是被Oracle放弃的一个用来做压力测试的项目,现在是由前Oracle,现谷歌就职的一款员工在维护。它是一款支持跨平台的软件,不用担心只能用于Windows或Linux系统。
Swingbench有四种类型的基准给到我们用来做性能测试,分别是:
- oewizard 简单的订单输入模式,用来创建繁重的写入工作负载。
- shwizard 简单的星型模式,用于创建分析类型(OLAP)的工作负载。
- jsonwizard 简单的JSON模式,用于创建JSON CRUD的工作负载。
- tpcdswizard 类似于TPC-DS模式,用于创建复杂的分析工作负载。
我们可以使用这几种类型,来分别测试不同的业务场景。
使用
注:此软件必须要先安装JDK 1.8+才能使用,JDK的安装就不再这里写了。
Windows使用
1、下载Swingbench
下载链接有两种选择,分别是:
- Swingbench官网下载
- github下载
我这里选择从Swingbench官网上下载,各位请根据自己喜好来选择。这两个下载链接地址,我也列在下面。
官网:http://www.dominicgiles.com/downloads.html
Github:https://github.com/domgiles/swingbench-public/releases/tag/production
2、解压
解压后有多个文件,分别是:
- bin 存放Linux的启动Shell脚本,Linux操作系统中使用。
- configs 存放压力测试使用的模板,常用的模板是SOE_Server_Side_V2.xml。
- launcher 存放与launcher相关的文件
- lib 存放使用的jar包
- log 存放运行的日志
- source 存放java文件
- sql 存放压力测试过程中使用到的sql文件,例如创建表语句等。
- utils 存放一些python小工具。
- winbin 存放Windows的启动bat脚本,Windows操作系统中使用。
- wizardconfigs 存储与压力测试相关的xml脚本
我们可以根据自己的操作系统,去选择具体是使用bat还是shell启动。另外,常用的启动脚本就几个,也简单介绍一下。
- oewizard.bat/oewizard.sh 创建一个简单的订单输入schema,为压力测试提供基础数据。
- shwizard.bat/shwizard.sh 创建一个包含星型模型的schema,同理是为压力测试OLAP业务提供基础数据。
- jsonwizard.bat/jsonwizard.sh 创建一个包括JSON的schema,同理是为压力测试JSON提供基础数据。
- tpcdswizard.bat/tpcdswizard.sh 创建一个类似于TPC-DS的schema,用于创建复杂的分析工作负载。
- swingbench.bat/swingbench.sh 调用最丰富的界面,能够让我们修改所有参数和监控工作负载,延迟和吞吐量会在界面上体现。
- minibench.bat/minibench.sh 调用更简洁的界面,让我们能够运行工作负载和监控,但必须在命令行或通过配置文件设置参数。
- charbench.bat/charbench.sh 仅命令行运行的工具,所有参数必须命令行上设置,延迟和吞吐量等指标写入标准输出或文件中。
使用示例
图型界面操作
1、造数据
1.1、调用图型界面
在确定要进行压力测试后,首先选择要测试的类型,例如我这里由于业务主要是OLTP业务,想测试一下峰值事务数,就可以使用oewizard类型来测试。
Windows系统就双击winbin目录下的oewizard.bat,就能够调出来图型界面;Linux下进入到bin目录下然后执行 ./oewizard.sh,就能够调出来图型界面,但前提是有配置xmanger或直接在图型界面中调用。
1.2、选择benchmark版本
选择benchmark的版本,Swingbench推荐使用2.0,那我们直接就默认即可。
1.3、选择操作类型
选择是创建还是删除schema,也就是模式。选择创建模式会去创建用户、表、索引和数据。
1.4、配置链接串、用户名和密码
如果你的数据库Oracle云,则需要指定认证的ZIP压缩包;否则,输入连接串、用户名和密码。注意,这里建议配置成sys权限,如果你配置的是system或具有dba权限的用户,则在创建完模式后,还需要使用SYS权限授权DBMS_LOCK和DBMS_RANDOM给该用户。
1.5、配置Schema
创建的schema用户名称,并指定用户使用的表空间,默认全部都是SOE。如果当前数据库没有SOE表空间,则需要先关闭图型界面,待创建好SOE表空间,再重新调用图型界面,一步步操作到这里。如果不想用SOE表空间,也可以使用其他已创建的表空间。注意,千万不要选择已经有业务数据或不可删除的表空间作为测试,千万不要给自己挖坑。表空间选择后,下一列的表空间的数据文件会自动填充,这里不需要调整。如果这里有空白,则表名此表空间没有在当前数据库中创建。最后,如果不想等待太长时间,可以勾选上只安装元数据,勾选后,它只会创建表空间,不会插入数据。
1.6、数据库选项
通常这里只需要将表空间类型调整为正常表空间,一般生产环境或测试环境不会有人使用bigfile表空间,其他不需要修改。
1.7、配置并行级别
默认情况下,会根据系统的cpu数据去设置并行级别,例如6个CPU,则会配置12个并行级别。自己根据实际情况去调整,可能不准确。
1.8、完成
到这里,就完成了,由于我勾选了只安装元数据,会比正常的步骤少。
2、测试
2.1、调用图型界面
Windows系统就双击winbin目录下的swingbench.bat,就能够调出来图型界面;Linux下进入到bin目录下然后执行 ./swingbench.sh,就能够调出来图型界面,但前提是有配置xmanger或直接在图型界面中调用。
根据数据选择要进行压力测试的类型,你总不可能数据造的都是JSON的,但是测试常用的业务吧。
2.2、配置参数
注:默认情况下启动后,需要手动停止才行,当然也可以自己配置压测的时间,在界面平稳后截图保存结果。
根据网上的某篇文章,参数可分为两种,分别是OLTP业务和OLAP业务时,去选择配置不同的参数。
OLTP swingbench参数参考
属性 | 配置 |
---|---|
Customer Registration | 15 |
Update Customer Details | 10 |
Browse Products | 50 |
Order Products | 40 |
Process Orders | 5 |
Browse Orders | 5 |
USERS | 200 |
DATASIZE | 300 GB |
OLAP swingbench参数参考
属性 | 配置 |
---|---|
Sales Rep Query | 50 |
Warehouse Query | 50 |
Warehouse Activity Query | 50 |
USERS | 200 |
DATASIZE | 300 GB |
除此之外,其他就是配置数据库的链接信息和数据库服务器的链接信息。下图是为本地虚拟机测试图,由于我没有配置服务器连接信息,结果可能显示不太完整。
命令行操作
1、造数据
1.1、创建表空间
提前创建测试使用的表空间,预估测试的数据量,尽量给足够的表空间,我这里模拟就创建最大32G表空间的数据文件。
create tablespace soe logging datafile '/home/oracle/oradata/orcl/soe01.dbf' size 50m autoextend on next 50m maxsize 34359721984;
1.2、造基础数据
打开cmd创建,进入到swingbench的bin或winbin目录下,执行shell或bat脚本,创建数据,我这里以windows系统为例。
windows系统执行
oewizard.bat -cl -create -cs //192.168.1.20/orcl -u soe -p soe -scale 1 -tc 2 -dba "sys as sysdba" -dbap orcl -ts soe -nc
Linux系统执行
./oewizard.sh -cl -create -cs //192.168.1.20/orcl -u soe -p soe -scale 1 -tc 2 -dba "sys as sysdba" -dbap orcl -ts soe -nc
参数说明:
- cl 指定运行在字符模式,也就是命令行模式
- create 创建benchmarks schema,提供基础数据
- cs 指定数据库的链接串,格式为://ip:端口//实例名
- u 基准模式的用户名,也就是接下来连接数据库做压力测试的用户名。
- p 基准模式用户名的密码。
- scale 基准数据的大小,单位是GB。
- tc 指定造数据时使用的并行度,也可以简单理解为线程数。
- dba 指定使用哪个dba用户来执行创建schema、表、索引等。
- dbap dba用户的密码。
- ts 指定基准数据存储的表空间。
- nc 指定打印输出时,不使用彩色,这里在我这个版本中有点小bug,建议在造基准数据时,有图型界面条件的,就使用图型界面。
1.3、压力测试
数据造好后,就可以开始做压力测试了。
参数说明:
- c 指定进行的压力测试类型
- cs 指定数据库的链接串,格式为://ip:端口//实例名
- uc 指定压测时的用户数
- rt 指定压测的时间,如果不指定,则会一直压测,直至手动停止,但手动停止不会生成results.xml报告,格式是hh:mm.sec。
- v 指定运行时显示的状态,可以包括trans|cpu|disk|dml|errs|tpm|tps|users|resp|vresp|tottx|trem,多个用英文逗号分割。经过我测试后发现,此参数也有bug,或者是我理解有误。
更多参数可以使用-h获取到。
Windows系统执行
charbench.bat -c ../configs/SOE_Server_Side_V2.xml -cs //192.168.125.20:1521/orcl -uc 10 -rt 00:01 -v users,tpm,tps,cpu,disk
Linux系统执行
./charbench.sh -c ../configs/SOE_Server_Side_V2.xml -cs //192.168.125.20:1521/orcl -uc 10 -rt 00:01 -v users,tpm,tps,cpu,disk
评论区