牛刀小试--Oracle Swingbench 压力测试

9856bdbbafe0decda37cc6c80ffbdf48.gif

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来学习 Oracle Swingbench 压力测试,欢迎点击上方蓝字关注我,标星或置顶,更多干货第一时间到达!

1、Swingbench 简介

Swingbench是一个免费的负载生成器和基准测试工具,其支持Oracle数据库(11g、12c、18c、19c)。Swingbench的开发目的主要是展示RAC的负载和测试,也可用于单实例环境。下载地址为 http://www.dominicgiles.com/downloads.html

Swingbench模拟了一套订单业务逻辑,通过创建SOE用户,模拟产品和订单业务,可以自定义数据量的大小,本次测试将生成50GB的业务数据。

a4cce9ab044a15ccefe2a845bb008703.png

2.下载 swingbench 工具


我们使用如下 github 地址下载:https://github.com/domgiles/swingbench-public/releases/tag/production

如果有需要可下载 java JDK https://www.oracle.com/java/technologies/downloads/

e7f5276f07289153ab9049d5e5489338.png

安装Swingbench 2.5或2.6,运行环境需要是Java 8及以上版本,Oracle 19c 默认使用 JDK 1.8版本,如果系统 JDK 版本为1.8以下的版本,则需要将JDK版本升级到1.8及以上版本。上传安装包解压即可。

上传后验证文件完整性并解压

cksum swingbenchlatest.zip
1679811525 41211958 swingbenchlatest.zip

unzip swingbenchlatest.zip

cd swingbench
ls -l
-rw-rw-rw- 1 oracle oinstall 6163 Mar 16 19:01 README.txt
drwxr-xr-x 3 oracle oinstall  283 Mar 15 21:30 bin
drwxr-xr-x 2 oracle oinstall 4096 Mar 16 03:29 configs
drwxr-xr-x 2 oracle oinstall  112 Mar 14 05:14 launcher
drwxr-xr-x 3 oracle oinstall  237 Mar 15 20:17 lib
drwxr-xr-x 2 oracle oinstall    6 Mar 3  2010 log
drwxr-xr-x 3 oracle oinstall   50 Mar 16 18:05 source
drwxr-xr-x 2 oracle oinstall 8192 Mar 15 20:17 sql
drwxr-xr-x 2 oracle oinstall   61 Nov 7  2018 utils
drwx------ 3 oracle oinstall 4096 Mar 14 05:39 winbin
drwxr-xr-x 2 oracle oinstall  155 Mar 14 05:23 wizardconfigs

855d4104b43e106e703ef7ebb68987eb.png

3.数据生成

进入 swingbench/bin 目录,Linux 系统在 bin 目录执行(需要调出图形化界面),

不然会报错Exception: java.lang.NoClassDefFoundError thrown from the UncaughtExceptionHandler in thread "AWT-EventQueue-0"

d89718d2c1c5a19cf45e94cd6f6f38dc.png

使用 xshell

# echo $DISPLAY
localhost:11.0
$ export DISPLAY=localhost:11.0
cd /home/oracle/tmp/swingbench/bin
./oewizard

58ec89783b359a60e51d86fc08968419.png

B.     选择version2.0 ,点击next;

8a36d024764c1a30c67730dbca7c11b4.png

C.     选择创建数据

ec6b817838ad49d5aa3e7a64e1df1ac4.png

b8bdf9467b4deb41295322735f4e47c4.png

填写连接串,格式 SCANIP:Port/service_names

//192.168.221.75:1770/jiekedb及 sys 用户密码

0b2e58ce042e0254922ffaf9e12201cb.png

可以选择默认用户密码及表空间,也可以选择现有表空间,如OLTP,这里默认,点击 next

608f12c66156feb7b7fc9ac4714a2593.png

40f4db11b7f085c9a83214def79c043e.png

如下图选择普通表空间:

02a92adad16bddb2053a39e0092c387d.png

为基准测试选择一个预先配置的大小。或者指定你自己的。选项1 = 1GB。根据你的Buffer Cache的大小,我们建议模式大小为 CPU 密集型工作负载为 6.9 GB, I/O 密集型工作负载至少为 322.7GB 数据。

2059d29549b8d11641075d4db45aeb66.png

由于测试环境配置较低,这里选择自定义 50 GB 的数据 。如下图,使用不同的数据量对表空间的要求也不尽相同,我这里选择 50GB 的数据,需要表空间大小160GB,临时表空间 30G。

b5d0415c9871314d16efd5a47f3ba36b.png

并行度调整,默认为 16 可根据个人机器自行调整,我这里选择 40

779e8e1ad7598afe55b757e7ee8b6d8b.png

到此处,根据上图去创建需要的表空间,和调整临时表空间大小,并将日志组大小调大,例如每个实例5*10g。

create tablespace SOE datafile '+DATA' size 10240M autoextend on maxsize 30g;
alter tablespace SOE add datafile '+DATA' size 10240M autoextend on maxsize 30g;
alter tablespace SOE add datafile '+DATA' size 10240M autoextend on maxsize 30g;
alter tablespace SOE add datafile '+DATA' size 10240M autoextend on maxsize 30g;
alter tablespace SOE add datafile '+DATA' size 10240M autoextend on maxsize 30g;
alter tablespace SOE add datafile '+DATA' size 10240M autoextend on maxsize 30g;


col FILE_NAME for a89
col TABLESPACE_NAME for a8
select
FILE_ID,FILE_NAME,TABLESPACE_NAME,BYTES/1024/1024/1024 GB from dba_temp_files;
alter database tempfile 1 resize 32767m;


--Redo 日志组由原来的各两组变成四组。
select GROUP#,THREAD#,BYTES/1024/1024 mb,status from v$log;
ALTER DATABASE ADD  LOGFILE THREAD 1 ('+DATA','+DATA') size 2048M;
ALTER DATABASE ADD  LOGFILE THREAD 2 ('+DATA','+DATA') size 2048M;
当上面操作都完成后,重新执行./oewizard,可以看到已经选择了数据文件。

05531a34c12d4ab29c5e855ef6726c5e.png

6b179ca29104c53bfe605dad73b2f505.png

点击完成后则开始创建数据,新建用户,表,序列、索引、约束等对象,并收集统计信息。50G 的数据创建还是比较慢的,还是静静的等待完成吧。

aee22ae335538000286c313806df86cd.png

由于是测试虚拟机器,我这里创建 50G 的数据 40 个并行,也大概需要 52 分钟,还是比较慢的。

SQL> col owner for a10
SQL> col table_name for a30
SQL> select
owner,table_name,TABLESPACE_NAME,NUM_ROWS from dba_tables where owner='SOE'
order by num_rows desc;
OWNER      TABLE_NAME                     TABLESPACE_NAME                  NUM_ROWS
----------
------------------------------ ------------------------------ ----------
SOE        ORDER_ITEMS                    SOE                             359864756
SOE        LOGON                          SOE                             119149200
SOE        ADDRESSES                      SOE                              75000000
SOE        CARD_DETAILS                   SOE                              75000000
SOE        ORDERS                         SOE                              71489500
SOE        CUSTOMERS                      SOE                              50000000
SOE        INVENTORIES                    SOE                                901018
SOE        PRODUCT_INFORMATION            SOE                                  1000
SOE        PRODUCT_DESCRIPTIONS           SOE                                  1000
SOE        WAREHOUSES                     SOE                                  1000
SOE        ORDERENTRY_METADATA            SOE                                   0
col INDEX_NAME for a30
select owner,table_name,INDEX_NAME,INDEX_TYPE,TABLESPACE_NAME from dba_indexes where owner='SOE';
OWNER      TABLE_NAME                     INDEX_NAME                     INDEX_TYPE                  TABLESPACE_NAME
----------
------------------------------ ------------------------------
--------------------------- ---------------
SOE        CUSTOMERS                      CUSTOMERS_PK                   NORMAL/REV                  SOE
SOE        CUSTOMERS                     CUST_ACCOUNT_MANAGER_IX       NORMAL                      SOE
SOE        CUSTOMERS                      CUST_DOB_IX                    NORMAL                      SOE
SOE        PRODUCT_DESCRIPTIONS           PRD_DESC_PK                    NORMAL                      SOE
SOE        INVENTORIES                    INVENTORY_PK                   NORMAL                      SOE
SOE        ADDRESSES                      ADDRESS_PK                     NORMAL/REV                  SOE
SOE        WAREHOUSES                     WHS_LOCATION_IX                NORMAL                      SOE
SOE        ORDERS                         ORD_SALES_REP_IX               NORMAL/REV                  SOE
SOE        CARD_DETAILS                   CARD_DETAILS_PK                NORMAL/REV                  SOE
SOE        INVENTORIES                    INV_PRODUCT_IX                 NORMAL                      SOE
SOE        INVENTORIES                    INV_WAREHOUSE_IX               NORMAL                      SOE
SOE        WAREHOUSES                     WAREHOUSES_PK                  NORMAL                      SOE
SOE        ORDERS                         ORD_CUSTOMER_IX                NORMAL/REV                  SOE
SOE        ORDER_ITEMS                    ORDER_ITEMS_PK                 NORMAL/REV                  SOE
SOE        ORDERS                         ORD_ORDER_DATE_IX              NORMAL/REV                  SOE
SOE        ORDERS                         ORDER_PK                       NORMAL/REV                  SOE
SOE        PRODUCT_INFORMATION            PRODUCT_INFORMATION_PK         NORMAL                      SOE
SOE        CUSTOMERS                     CUST_FUNC_LOWER_NAME_IX        FUNCTION-BASED  NORMAL       SOE
SOE        ORDER_ITEMS                    ITEM_ORDER_IX                  NORMAL/REV                  SOE
SOE        PRODUCT_INFORMATION            PROD_CATEGORY_IX               NORMAL                      SOE
SOE        ORDERS                         ORD_WAREHOUSE_IX               NORMAL                      SOE
SOE        CARD_DETAILS                   CARDDETAILS_CUST_IX            NORMAL                      SOE
SOE        ADDRESSES                      ADDRESS_CUST_IX                NORMAL/REV                  SOE
SOE        PRODUCT_INFORMATION            PROD_SUPPLIER_IX               NORMAL                      SOE
SOE        ORDER_ITEMS                    ITEM_PRODUCT_IX                NORMAL/REV                  SOE
SOE        CUSTOMERS                      CUST_EMAIL_IX                  NORMAL                      SOE
SOE        PRODUCT_DESCRIPTIONS           PROD_NAME_IX                   NORMAL                      SOE


27 rows selected.

aeea8eb1522761f00519bed6d2cc00d3.png

1a0e34f3bfbda0dad91e93ab5365c2d5.png

点击 ok,完成数据创建,这样就创建成功了。

接下来调整参数,重启数据库就可以测试了,调整参数如下:

alter system set processes=4000 scope=spfile;
alter system set db_files=2500 scope=spfile;
alter system set standby_file_management='AUTO';
alter system set control_file_record_keep_time=30;
alter system set fast_start_mttr_target=120 scope=spfile;
alter system set open_links_per_instance=10 scope=spfile;
alter system set session_cached_cursors=600 scope=spfile; 
alter system set archive_lag_target=1800 scope=spfile;
alter system set open_cursors=1500 scope=spfile;
alter system set open_links=10 scope=spfile;
alter system set undo_retention=10800 scope=spfile;
alter system set lock_sga=FALSE scope=spfile;
alter system set remote_login_passwordfile='EXCLUSIVE' scope=spfile;
alter system set resource_manager_plan='' scope=spfile;
alter system set statistics_level='TYPICAL' scope=spfile;
alter system set timed_statistics=TRUE scope=spfile;
alter system set undo_management='AUTO' scope=spfile;
alter system set db_cache_advice='OFF' scope=spfile;
alter system set audit_trail='NONE' scope=spfile;
alter system set audit_sys_operations=false scope=spfile;
alter system set "_gc_policy_time"=0 scope=spfile;
alter system set "_sort_elimination_cost_ratio"=0 scope=spfile;
alter system set "_use_adaptive_log_file_sync"= FALSE scope=spfile;
alter system set "result_cache_max_size"= 0 scope=spfile;
alter system set use_large_pages=only scope=spfile;
alter system set "_optimizer_use_feedback"=false scope=spfile;

调整好参数后,重启数据库

srvctl stop database -d jxrt4db

srvctl start database -d jxrt4db

srvctl status database -d jxrt4db

Instance jiekedb1 is running on node jieke19cr1
Instance jiekedb2 is running on node jieke19cr2

3.测试

cd /home/oracle/tmp/swingbench/bin
执行./swingbench
Application :    Swingbench
Author     :         Dominic Giles
Version    : 2.6.0.1163
进入 Swingbench/bin目录运行 swingbench,执行测试,修改数据库连接串、用户连接数设置,勾选要测试的选项,开始测试。

11df375bff80b8f02de170474bdc4143.png

d8cc7eeb4ed067a3c7a8a39b0d1d574b.png

686cc049594f9346695be4e5a160eb47.png

填入要监控的主机信息,对主机进行监控,测试一下是否能连接成功,上述都配置完以后,点击绿色的开始按钮,开始测试,当测试的图形平稳后截图。

3f0c756aff1736ba8ea3e863cd012a47.png

ef07d09ec9984190a85d05fb6aaae9ac.png

b19c3aec05812430be156e0f726a9580.png

4d8aea24caeef8ba1efce986e44f9dcb.png

5a6d7f5fe15703888004d957ddcdfcd8.png

4.总结

压测总共使用 23 分钟,500 并发会话连接,大约有 350 活跃会话。我们需要观察 TPS(吞吐量)、IOPS(每秒读写次数)、RT(响应时间)CPU等数据。如下:

TPS4628

RT2419

CPU100%

IOPS53821


好了,这次就先这样吧,欢迎一起来讨论。全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

❤️ 欢迎关注我的视频号,一起学习新知识!!!

————————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————

dfc9f8152ef24fb5eb52793ce5baa784.gif

Oracle 表碎片检查及整理方案

OGG|Oracle GoldenGate 基础

2021 年公众号历史文章合集整理

2020 年公众号历史文章合集整理

我的 2021 年终总结和 2022 展望

Oracle 19c  RAC 遇到的几个问题

利用 OGG 迁移 Oracle11g 到 19C

OGG|Oracle GoldenGate 微服务架构

Oracle 查询表空间使用率超慢问题一则

国产数据库|TiDB 5.4 单机快速安装初体验

Oracle ADG 备库停启维护流程及增量恢复

Linux 环境搭建 MySQL8.0.28 主从同步环境

6b2098f5f82da8484a874a8e57bc5bb7.png

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值