测试平台: RHEL4.8 x8_64 + Oracle Database 10.2.0.4
1) 工具描述
orabm是一个开源的系统CPU性能测试工具, 包含了一套SQL脚本和几个命令行程序. Orabm通过在用户指定的并发下运行指定数量的事务来测试数据库的TPS值. TPS是Transactions Per Second的缩写, 也就是事务数/秒, 它是软件测试结果的测量单位. 一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程. 客户机在发送请求时开始计时, 收到服务器响应后结束计时, 以此来计算使用的时间和完成的事务个数, 最终利用这些信息来估计得分.
2) 下载安装
下载地址: http://www.linxcel.co.uk/orabm/orabm.tar
$ cd /orahome/wangnc/os/
$ rz
$ tar xvf orabm.tar
$ cd install
$ ls
orabm_analyze.sql orabm_cache.sql orabm_ind.sql orabm_query_cache.sql orabm_serverside_stress.sql orabm_tab_rm.sql orabm_tab.sql orabm_user.sql _vti_cnf
注意: 缺省的orabm测试用用户会建立在tools表空间, 如果想把数据放在其他表空间可以修改orabm_user.sql来调整.
$ vi orabm_user.sql
$ sqlplus / as sysdba @orabm_user.sql
$ sqlplus / as sysdba @orabm_tab.sql
$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib32:$LD_LIBRARY_PATH
$ chmod u+x ../bin/linux/orabmload.10g.linux
$ ../bin/linux/orabmload.10g.linux Warehouses 1
$ sqlplus / as sysdba @orabm_ind.sql
$ sqlplus / as sysdba @orabm_analyze.sql
$ sqlplus / as sysdba @orabm_serverside_stress.sql
$ sqlplus / as sysdba @orabm_cache.sql
3) 简单测试
orabm后接2个参数(如果测试远程的压力则接三个参数), 第一个参数表示测试多少个并发(对应多个session), 第二个参数表示执行多少个事务(不是所有的并发共执行多少事务,而是每个并发执行的事务数), 一般来说这个值设置为10000, 第三个参数是在测试远程数据库的时候用的, 值为tnsnames.ora配置的远程数据库连接的别名.
$ cd ../bin/linux/
$ chmod u+x orabm.10g.linux
$ ./orabm.10g.linux 1 10000
---begin sess=1 txn=10000 ORACLE_SID=ESUITE Tue Jul 14 13:36:18 2009
ESUITE.LK txn(all)=10000 xn(sam)=7999 t(sam)=3 tps=2666 sl=3980(49.8%) on=2367(29.6%) oi=1652(20.7%) end=140709-13:36:23
---end - Tue Jul 14 13:36:23 2009
输出结果的说明:
txn(all)----代表Total transaction Count, 总的事务数量
xn(sam)-----采样的事务数量
t(sam)------采样事务运行的时间
tps的计算: 每一个阶段所有session的tps相加就是当前测试的总tps了.
执行的结果会打印在屏幕上, 同时会生成一个orabm.${ORACLE_SID}.log的文件, 该文件内容是累加的. 如果所有的测试表和相关索引都已经Cache到内存中, 系统上没有其他任务运行, 那么可以看到单个Orabm Session会使用将近100%的CPU资源. 可以使用Top来查看CPU使用情况, 或者检查数据库中不存在"db file sequential read"等待事件.
4) 测试用例
对本地数据库进行三个阶段测试, 分别以1,2,6个并发执行10000个事务:
$ ./orabm.10g.linux 1,2,6 10000
---begin sess=1 txn=10000 ORACLE_SID=ESUITE Tue Jul 14 13:38:47 2009
ESUITE.LK txn(all)=10000 xn(sam)=7999 t(sam)=3 tps=2666 sl=3883(48.5%) on=2498(31.2%) oi=1618(20.2%) end=140709-13:38:52
---end - Tue Jul 14 13:38:52 2009
---begin sess=2 txn=10000 ORACLE_SID=ESUITE Tue Jul 14 13:38:52 2009
ESUITE.LK txn(all)=10000 xn(sam)=7999 t(sam)=4 tps=2000 sl=4004(50.1%) on=2370(29.6%) oi=1625(20.3%) end=140709-13:38:56
ESUITE.LK txn(all)=10000 xn(sam)=7999 t(sam)=4 tps=2000 sl=3989(49.9%) on=2435(30.4%) oi=1575(19.7%) end=140709-13:38:56
---end - Tue Jul 14 13:38:56 2009
---begin sess=6 txn=10000 ORACLE_SID=ESUITE Tue Jul 14 13:38:56 2009
ESUITE.LK txn(all)=10000 xn(sam)=7999 t(sam)=3 tps=2666 sl=4054(50.7%) on=2375(29.7%) oi=1570(19.6%) end=140709-13:39:01
ESUITE.LK txn(all)=10000 xn(sam)=7999 t(sam)=4 tps=2000 sl=4003(50%) on=2380(29.8%) oi=1616(20.2%) end=140709-13:39:02
ESUITE.LK txn(all)=10000 xn(sam)=7999 t(sam)=4 tps=2000 sl=3903(48.8%) on=2423(30.3%) oi=1673(20.9%) end=140709-13:39:02
ESUITE.LK txn(all)=10000 xn(sam)=7999 t(sam)=5 tps=1600 sl=4010(50.1%) on=2426(30.3%) oi=1563(19.5%) end=140709-13:39:03
ESUITE.LK txn(all)=10000 xn(sam)=7999 t(sam)=6 tps=1333 sl=4036(50.5%) on=2413(30.2%) oi=1550(19.4%) end=140709-13:39:04
ESUITE.LK txn(all)=10000 xn(sam)=7999 t(sam)=6 tps=1333 sl=4017(50.2%) on=2381(29.8%) oi=1601(20%) end=140709-13:39:04
---end - Tue Jul 14 13:39:04 2009
其实从上面的运行结果中已经差不多可以看出TPS的值了, 把并发session的TPS值相加即可. 不过orabm程序包中有一个格式化输出结果的SHELL脚本, 可以看得更加清楚:
$ cd ..
$ ./orabm_tps.sh linux/orabm.$ORACLE_SID.log
ORACLE_SID=ESUITE sess=1 tps=2286
ORACLE_SID=ESUITE sess=1 tps=2286
ORACLE_SID=ESUITE sess=1 tps=2000
ORACLE_SID=ESUITE sess=2 tps=5332
ORACLE_SID=ESUITE sess=6 tps=10133
5) 删除orabm
$ sqlplus / as sysdba
SQL> drop user orabm cascade;