SwingBench 字符模式压测最佳实践

2018-09-01 00:21 by AlfredZhao, 阅读, 评论, 收藏, 编辑

之前写过《使用SwingBench 对Oracle RAC DB性能 压力测试》,使用的是最基础直观的图形模式,已经可以满足大多数需求。

但是在有些场景下,图形模式可能本身消耗资源过大,尤其在生成大量测试数据时,很可能会由于图形本身的不稳定导致卡死甚至直接中途退出,严重影响效率和测试体验。
而如果采用静默模式,直接使用xml编辑又不能很好的确认改的是否正确。
本文主要介绍下我在做某次压力测试时发现的小技巧。

1.生成压测数据

之前使用图形界面时,我们直接去执行 ./oewizard 即可调用图形界面按照提示一步步配置最终生成压力测试的数据。

而使用字符模式,则需要指定参数配置文件以及一些必要的参数,先来看都有哪些参数:

[oracle@db50 bin]$ ./oewizard -h
usage: parameters:
 -allindexes             build all indexes for schema
 -bigfile                use big file tablespaces
 -c <filename>           wizard config file
 -cl                     run in character mode
 -compositepart          use a composite paritioning model if it exisits
 -compress               use default compression model if it exists
 -create                 create benchmarks schema
 -cs <connectString>     connectring for database
 -dba <username>         dba username for schema creation
 -dbap <password>        password for schema creation
 -debug                  turn on debugging output
 -debugf                 turn on debugging output to file (debug.log)
 -df <datafile>          datafile name used to create schema in
 -drop                   drop benchmarks schema
 -dt <driverType>        driver type (oci|thin)
 -g                      run in graphical mode (default)
 -generate               generate data for benchmark if available
 -h,--help               print this message
 -hashpart               use hash paritioning model if it exists
 -hcccompress            use HCC compression if it exisits
 -nocompress             don't use any database compression
 -noindexes              don't build any indexes for schema
 -nopart                 don't use any database partitioning
 -normalfile             use normal file tablespaces
 -oltpcompress           use OLTP compression if it exisits
 -p <password>           password for benchmark schema
 -part                   use default paritioning model if it exists
 -pkindexes              only create primary keys for schema
 -rangepart              use a range paritioning model if it exisits
 -s                      run in silent mode
 -scale <scale>          mulitiplier for default config
 -sp <soft partitions>   the number of softparitions used. Defaults to cpu
                         count
 -tc <thread count>      the number of threads(parallelism) used to
                         generate data. Defaults to cpus*2
 -ts <tablespace>        tablespace to create schema in
 -u <username>           username for benchmark schema
 -v                      run in verbose mode when running from command
                         line
 -version <version>      version of the benchmark to run
[oracle@db50 bin]$ 

实际我这里测试,用到的参数有 -cl, -create, -c, -scale, -tc, -part
其中-cl, -create是必须的;-c是指定某个xml配置文件,-scale是指纯数据量(是默认1G配置的多少倍),-tc是指并行度,-part是指分区。

./oewizard -cl -create -c oewizard.xml -scale 150 -tc 64 -part

而关于oewizard.xml 这个配置文件,我只改了下面这部分的内容,其他保持不变:

<DefaultParameters>
   <Parameter Key="datatablespacesexists" Value="true"/>
   <Parameter Key="password" Value="soe"/>
   <Parameter Key="username" Value="soe"/>
   <Parameter Key="datafile" Value="+DATA"/>
   <Parameter Key="userexists" Value="true"/>
   <Parameter Key="connectionstring" Value="//db50/jyzhao"/>
   <Parameter Key="connectiontype" Value="thin"/>
   <Parameter Key="onlydropuser" Value="false"/>
   <Parameter Key="operation" Value="create"/>
   <Parameter Key="tablespace" Value="SOE"/>
   <Parameter Key="dbausername" Value="sys as sysdba"/>
   <Parameter Key="dbapassword" Value="oracle"/>
   <Parameter Key="output" Value="Verbose"/>
</DefaultParameters>

主要就是确认压测用户及密码,以及数据文件的创建位置、数据库连接字符串、数据库sys用户及密码这些项。
而技巧就是,如果不确认自己的配置文件写的正确与否,可以先这样执行,带入对应的参数,调用图形走一遍check下所有配置:

./oewizard -c oewizard.xml -scale 150 -tc 64 -part

确认无误后,我这里由于生成的数据量很大,裸数据就150G,这还不算索引。所以采用后台执行的方式,并在执行前后记录一个时间:

--1.生成压测数据脚本
$ cat test150.sh 
date
echo "=====Begin====="
./oewizard -cl -create -c oewizard.xml -scale 150 -tc 64 -part
echo "=====End====="
date

--2.后台执行,输出日志
nohup sh test150.sh > test150.log &

--3.跟踪日志输出
tail -20f test150.log

最终花了将近4小时才生成完毕:

[oracle@yzdb1 bin]$ tail -20f test150.log 
Fri Aug 31 10:52:54 CST 2018
=====Begin=====
SwingBench Wizard
Author  :        Dominic Giles
Version :        2.5.0.971

Running in Lights Out Mode using config file : oewizard.xml

============================================
|           Datagenerator Run Stats        |
============================================
Connection Time                        0:00:00.005
Data Generation Time                   3:41:44.395
DDL Creation Time                      0:09:00.405
Total Run Time                         3:50:44.809
Rows Inserted per sec                      136,446
Data Generated (MB) per sec                   10.9
Actual Rows Generated                1,816,220,694


Post Creation Validation Report
===============================
The schema appears to have been created successfully.

Valid Objects
=============
Valid Tables : 'ORDERS','ORDER_ITEMS','CUSTOMERS','WAREHOUSES','ORDERENTRY_METADATA','INVENTORIES','PRODUCT_INFORMATION','PRODUCT_DESCRIPTIONS','ADDRESSES','CARD_DETAILS'
Valid Indexes : 'PRD_DESC_PK','PROD_NAME_IX','PRODUCT_INFORMATION_PK','PROD_SUPPLIER_IX','PROD_CATEGORY_IX','INVENTORY_PK','INV_PRODUCT_IX','INV_WAREHOUSE_IX','ORDER_PK','ORD_SALES_REP_IX','ORD_CUSTOMER_IX','ORD_ORDER_DATE_IX','ORD_WAREHOUSE_IX','ORDER_ITEMS_PK','ITEM_ORDER_IX','ITEM_PRODUCT_IX','WAREHOUSES_PK','WHS_LOCATION_IX','CUSTOMERS_PK','CUST_EMAIL_IX','CUST_ACCOUNT_MANAGER_IX','CUST_FUNC_LOWER_NAME_IX','ADDRESS_PK','ADDRESS_CUST_IX','CARD_DETAILS_PK','CARDDETAILS_CUST_IX'
Valid Views : 'PRODUCTS','PRODUCT_PRICES'
Valid Sequences : 'CUSTOMER_SEQ','ORDERS_SEQ','ADDRESS_SEQ','LOGON_SEQ','CARD_DETAILS_SEQ'
Valid Code : 'ORDERENTRY'
Schema Created
=====End=====
Fri Aug 31 14:43:42 CST 2018

事实证明我在执行开始和结束的地方加的这个时间,有些多此一举了哈,人家软件有统计Total Run Time。

2.进行压力测试

使用图形模式,就是直接执行 ./swingbench 然后配置完成后进行压力测试直接可以直观显示类似下面这样的压测结果:

使用字符的话,就需要调用 ./charbench ,有效的参数如下:

[oracle@db50 bin]$ ./charbench -h
usage: parameters:
 -D <variable=value>           use value for given environment variable
 -a                            run automatically
 -be <stopafter>               end recording statistics after. Value is in
                               the form hh:mm
 -bg                           indicate that charbench will be run in the
                               background
 -bs <startafter>              start recording statistics after. Value is
                               in the form hh:mm
 -c <filename>                 specify config file
 -co <hostname>                specify/override coordinator in
                               configuration file.
 -com <comment>                specify comment for this benchmark run (in
                               double quotes)
 -cpuloc <hostname >           specify/overide location/hostname of the
                               cpu monitor.
 -cpupass                      specify/overide os password of the user
                               used to monitor cpu.
 -cpuuser                      specify/overide os username of the user
                               used to monitor cpu.
 -cs <connectstring>           override connect string in configuration
                               file
 -debug                        turn on debugging. Written to standard out
 -debugf                       turn on debugging. Witten to debug.log.
 -debugfine                    turn on finest level of debugging
 -di <shortname(s)>            disable transactions(s) by short name,
                               comma separated
 -dt <drivertype>              override driver type in configuration file
                               (thin, oci, ttdirect, ttclient)
 -dumptx                       output transaction response times to file
 -dumptxdir <directory name>   directory for transaction response times
                               files
 -en <shortname(s)>            enable transactions(s) by short name, comma
                               separated
 -env                          display environment configuration
 -f                            force data collection and run termination
                               regardless of state
 -g <groupID>                  distributed group identifier
 -h,--help                     print this message
 -i                            run interactively (default)
 -intermax <milliseconds>      override minimum inter transaction sleep
                               time (default = 0)
 -intermin <milliseconds>      override minimum inter transaction sleep
                               time (default = 0)
 -ld <milliseconds>            specify/overide the logon delay
                               (milliseconds)
 -max <milliseconds>           override maximum intra transaction think
                               time in configuration file
 -min <milliseconds>           override minimum intra transaction think
                               time in configuration file
 -p <password>                 override password in configuration file
 -r <filename>                 specify results file
 -rr                           specify/overide refresh rate for charts in
                               secs
 -rt <runtime>                 specify/overide run time for the benchmark.
                               Value is in the form hh:mm
 -s                            run silent
 -stats <stats level>          specify level result stats detail (full or
                               simple)
 -u <username>                 override username in configuration file
 -uc <user count>              override user count in configuration file.
 -v <options>                  display run statistics (vmstat/sar like
                               output), options include (comma separated no spaces).
                               trans|cpu|disk|dml|errs|tpm|tps|users|resp|vresp
 -vo <verboseOutput>           output file for verbose output (defaults to
                               stdout)
[oracle@db50 bin]$ 

而最重要的xml配置文件如果手动编辑就更是很苦恼的一件事,同样利用技巧,图形调用后配置好各参数然后另存为导出一份xml配置即可。
比如导出的xml配置文件是模拟的2000并发的OLTP类型业务,文件名取为oltp2000.xml
那么字符测试就可以直接调用:

--简单的只看事物量
[oracle@db50 bin]$ ./charbench -c oltp2000.xml

--指定其中一台机器登陆信息,同时看到这台机器的CPU和I/O负载情况,以及响应时间
[oracle@db50 bin]$ ./charbench -c oltp2000.xml -cpuloc db50 -cpuuser oracle -cpupass oracle -v 'users,cpu,disk,tpm,tps,resp' > oltp2000_load50.log
[oracle@db50 bin]$ ./charbench -c oltp2000.xml -cpuloc db52 -cpuuser oracle -cpupass oracle -v 'users,cpu,disk,tpm,tps,resp' > oltp2000_load52.log

--准生产的数据当时没有留存,这里就用我实验环境的数据(50并发)简单说明下:
[oracle@db50 bin]$ tail -20f oltp2000_load50.log 
Author  :        Dominic Giles
Version :        2.5.0.971

Results will be written to results.xml.
Hit Return to Terminate Run...

Time            Users   User    System  Wait    Idle    Bi      Bo      TPM     TPS     Response
23:19:30        [0/50]  0       0       0       0       0       0       0       0       0
23:19:33        [0/50]  0       0       0       0       0       0       0       0       0
23:19:34        [0/50]  11      22      2       65      19      2194    0       0       0
23:19:35        [0/50]  27      44      0       28      155     1514    0       0       0
23:19:36        [0/50]  8       24      1       67      31      1593    0       0       0
23:19:37        [12/50] 5       27      2       65      56      2626    0       0       0
23:19:38        [35/50] 6       11      1       82      39      1152    0       0       0
23:19:39        [50/50] 8       20      2       71      23      2802    0       0       0
23:19:40        [50/50] 16      33      0       51      820     1218    43      43      233
23:19:41        [50/50] 26      73      1       0       1780    580     161     118     390
23:19:42        [50/50] 45      54      1       0       1833    658     264     103     393
23:19:43        [50/50] 36      63      1       0       1959    655     384     120     361
23:19:44        [50/50] 25      75      0       0       1999    703     487     103     366
23:19:45        [50/50] 33      66      1       0       1611    588     563     76      380
23:19:46        [50/50] 46      53      1       0       1727    724     650     87      384
23:19:47        [50/50] 35      64      1       0       1607    694     766     116     376
23:19:48        [50/50] 30      69      1       0       1587    596     852     86      382
23:19:49        [50/50] 31      68      1       0       2227    629     945     93      380
23:19:50        [50/50] 46      54      0       0       2611    689     1034    89      385
23:19:51        [50/50] 35      64      1       0       1763    626     1127    93      385
23:19:52        [50/50] 22      76      2       0       2276    825     1248    121     379
23:19:53        [50/50] 29      70      1       0       2195    787     1378    130     371
23:19:54        [50/50] 43      55      2       0       2075    767     1490    112     365
23:19:55        [50/50] 39      61      0       0       1827    965     1617    127     359
23:19:56        [50/50] 29      71      0       0       1951    646     1715    98      360
23:19:57        [50/50] 37      63      0       0       1611    946     1799    84      365
23:19:58        [50/50] 45      55      0       0       1671    834     1912    113     366
23:19:59        [50/50] 34      66      0       0       1867    705     2023    111     362
23:20:00        [50/50] 39      61      0       0       2235    889     2137    114     358
23:20:01        [50/50] 40      60      0       0       1931    859     2245    108     357
23:20:02        [50/50] 36      64      0       0       1866    892     2362    117     355
23:20:03        [50/50] 38      62      0       0       2758    734     2450    88      353
23:20:04        [50/50] 42      58      0       0       3191    913     2539    89      351
23:20:05        [50/50] 47      53      0       0       2451    935     2636    97      352
23:20:06        [50/50] 48      52      0       0       2059    652     2725    89      350
23:20:07        [50/50] 42      58      0       0       2575    995     2802    77      348
23:20:08        [50/50] 42      58      0       0       2295    658     2868    66      355

可以看到,我这里测试的50个用户[50/50]很快连接上,之后CPU的信息有4列(User, System, Wait, Idle),I/O的信息(Bi, Bo)有两列,最后三列(TPM, TPS, Response)就分别是每分钟事物量、每秒种事物量、响应时间。
当然了我这里的这个测试环境由于配置很低,且没有做专门的调优,测出的性能数据不是很好看了,只是演示用~

版权声明:本文为jyzhao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jyzhao/p/9568806.html