swingbench-免费的oracle性能压测工具
【摘要】SwingBench介绍: SwingBench由负载生成器,协调器和集群概述组成。该软件使得能够生成负载并且将图表的事务/响应时间映射。 SwingBench可用于演示和测试诸如实际应用集群,在线表重建,备用数据库,在线备份和恢复等技术 SwingBench附带的代码包括6个基准,OrderEntry,SalesHistory,TPC-DS Like,JSON,Calli...
SwingBench介绍:
SwingBench由负载生成器,协调器和集群概述组成。该软件使得能够生成负载并且将图表的事务/响应时间映射。
SwingBench可用于演示和测试诸如实际应用集群,在线表重建,备用数据库,在线备份和恢复等技术
SwingBench附带的代码包括6个基准,OrderEntry,SalesHistory,TPC-DS Like,JSON,CallingCircle和StressTest ..
OrderEntry基于Oracle11g / Oracle12c附带的“oe”模式。它已被修改,以便不需要安装Spatial,Intermedia架构。它可以连续运行(直到你用完了空间)。它在少量表上引入了大量争用,旨在强调互连和内存。它使用位于bin目录中的“oewizard”进行安装。基准测试都存在纯jdbc和pl / sql(较低的网络开销)变体。
SalesHistory基于Oracle11g / Oracle12c附带的“sh”架构,旨在测试复杂查询在对大型表进行运行时的性能。它是只读的,可以按照从1GB到1TB的默认大小进行缩放。自定义模式还允许创建更小和更大的模式
CallingCircle(不建议使用)模拟为在线电信应用程序生成的SQL。它需要在每次运行之前将数据文件从数据库服务器生成并复制到负载生成器,通常需要1到8 GB的磁盘空间。两个基准都是CPU密集型。经验表明,您至少需要1台处理器的负载发生器到数据库服务器的每两个处理器。它旨在强调CPU和内存,而不需要强大的I / O子系统。它使用位于bin目录中的“ccwizard”进行安装
StressTest只是根据一个熟知的表来触发随机插入,更新,选择和更新。
JSON Stresstest基于对机场之间飞行的人员进行建模的简单JSON文档。它遵循基本的CRUD模型。
TPC-DS喜欢Benchmark是类似于TPC-DS的基准。它在单独的配置文件中具有查询和事务工作负载。
SwingBench下载:
SwingBench官方网址:http://www.dominicgiles.com/swingbench.html,可以download下最新2.6版本的SwingBench,需要先安装好jdk8,可以直接从oracle官网下载rpm安装即可。SwingBench包文件解压后如下:
生成测试数据:
以order entry为示例:
图形界面生成测试数据和压测:
cd /tmp/swingbench/bin
./oewizard
选择version2.0, next
选择create the order entry schema,next
配置connect string、username和password, next
配置tablespaces的datafile, next
配置schema的size, next
默认值为CPU个数*2, next
点击yes , next
开始运行sql脚本生产测试数据,这里需要等待。
数据已成功生成,接下来可以做压测了。
开始性能压测:
cd /tmp/swingbench/bin
./swingbench
修改connect string,配置server monitoring相关配置参数,调整transtions的load ratio、number of users。
可以收集数据库信息,生成awr报告。启动压测
可以在output标签上查看压测结果
也可以在将结果保存在bin目录下,XML格式
测试结果对比生成html文件,用bmcompare工具
命令行界面生成测试数据和压测:
[root@oracle bin]# time ./oewizard -cl -create -scale 1 -cs //oracle:1521/xcky -dba system -dbap oracle -u soe1 -p soe1 -ts soe -df /u01/app/oracle/oradata/xcky/soe.dbf -tc 4 -s The following statement failed : GRANT EXECUTE ON dbms_lock TO soe1 : Due to : ORA-01031: insufficient privileges
The following statement failed : begin $IF DBMS_DB_VERSION.VER_LE_10_2 $THEN -- Use the default stats collection approach dbms_stats.gather_schema_stats( OWNNAME=> 'SOE1' ,ESTIMATE_PERCENT=>DBMS_STATS.AUTO_SAMPLE_SIZE ,BLOCK_SAMPLE=>TRUE ,METHOD_OPT=>'FOR ALL COLUMNS SIZE SKEWONLY' ,DEGREE=> 4 ,GRANULARITY=>'ALL' ,CASCADE=>TRUE); $ELSIF DBMS_DB_VERSION.VER_LE_11_2 $THEN -- Oracle 11g release 2. Emable concurrent stats collection dbms_output.put_line('database version is less than or equal to 11.2'); DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT','TRUE'); DBMS_STATS.SET_TABLE_PREFS('SOE1','WAREHOUSES','INCREMENTAL','TRUE'); DBMS_STATS.SET_TABLE_PREFS('SOE1','INVENTORIES','INCREMENTAL','TRUE'); DBMS_STATS.SET_TABLE_PREFS('SOE1','PRODUCT_INFORMATION','INCREMENTAL','TRUE'); DBMS_STATS.SET_TABLE_PREFS('SOE1','PRODUCT_DESCRIPTIONS','INCREMENTAL','TRUE'); DBMS_STATS.SET_TABLE_PREFS('SOE1','ORDERENTRY_METADATA','INCREMENTAL','TRUE'); DBMS_STATS.SET_TABLE_PREFS('SOE1','CUSTOMERS','INCREMENTAL','TRUE'); DBMS_STATS.SET_TABLE_PREFS('SOE1','ADDRESSES','INCREMENTAL','TRUE'); DBMS_STATS.SET_TABLE_PREFS('SOE1','ORDER_ITEMS','INCREMENTAL','TRUE'); DBMS_STATS.SET_TABLE_PREFS('SOE1','ORDERS','INCREMENTAL','TRUE'); DBMS_STATS.SET_TABLE_PREFS('SOE1','LOGON','INCREMENTAL','TRUE'); DBMS_STATS.GATHER_SCHEMA_STATS('SOE1'); $ELSIF DBMS_DB_VERSION.VER_LE_12 $THEN -- Oracle 12c. Concurrent Stats collection work slightly different in this release execute immediate q'[ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'DEFAULT_PLAN']'; execute immediate q'[ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 4 ]'; DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT','MANUAL');