Orabm实际上是一堆sql的集合,通过在用户指定的并发下运行指定数量的事务来测试系统性能.它主要测试数据库服务器的CPU性能和内存。
Orabm通过在每个用户指定的并发数据库会话(session) 中运行用户执行数量的数据库事务来进行工作.事务通过ORABM模式下的ORABM_SERVERSIDE_STRESS存储过程运行。对每个并发会话来说,ORABM_SERVERSIDE_STRESS运行在orabm命令行下指定的事务数,并返回该会话在采样间隔完成时的TPS值.要确保所有并发会话都是在采样间隔期间处理事务,TPS值仅包括事务的中间的80%,初始的10%和最后的 10%将忽略掉。
可以用在linux/windows/solaris下使用。Orabm不一定需要运行在数据库所在服务器上,它可以运行在任何安装了9i客户端的终端上。你可以用客户端连接到远程数据库来测试远程数据库的性能状况。
1. 首先,在服务器上安装oracle 9i server版。Oracle 9i的安装方法此处略过。需注意的是,因为orabm主要测试的是CPU和内存,所以应该尽量避免其他因素影响测试,故为了更好的测试CPU和内存的性能,在建库时,最好将数据库缓存大小设成大于200M,这样,所有的数据都可以放在内存中,不会因为物理I/O而使得测试不准确。
注:Orabm只支持oracle 9i及之前版本。10g和11g不支持。
2. Orabm安装文件的下载地址:http://www.linxcel.co.uk/orabm/orabm.tar
3. 解压tar包
tar -xvf orabm.tar
得到以下文件和文件夹
bin install orabm.htm orabm.pdf orabm_files src
进入install文件夹,有以下一些sql文件
orabm_analyze.sql orabm_ind.sql orabm_serverside_stress.sql orabm_tab_rm.sql orabm_cache.sql orabm_query_cache.sql orabm_tab.sql orabm_user.sql
4. 假定数据库system用户的密码为pwd,数据库全局服务名为tnsname。
具体安装步骤如下:
# |
Operation |
Command |
1 |
create the ORABM user (assumes TOOLS tablespace, TEMP temporary tablespace) |
sqlplus system/pwd @orabm_user |
2 |
create the tables |
sqlplus system/pwd @orabm_tab |
3 |
load the data |
$ orabmload Warehouses n |
4 |
create the indexes |
sqlplus system/pwd @orabm_ind |
5 |
analyze the tables and indexes |
sqlplus system/pwd @orabm_analyze |
6 |
Ensure ORABM can run the DBMS_LOCK package |
As SYS run: GRANT EXECUTE ON DBMS_LOCK TO ORABM |
1) create the ORABM user (assumes TOOLS tablespace, TEMP temporary tablespace)
第一步是创建orabm用户,并作相应授权。注意,默认情况下,orabm用户的默认表空间是tools,临时表空间是temp。导入一个Warehouses的数据量大概是100M,所以,你应该保证tools表空间大于150m,或者新建一个表空间,然后修改orabm_user.sql里的相关信息。
sqlplus system/pwd @orabm_user
远程数据库使用:
sqlplus system/pwd@tnsname @orabm_user
2) create the tables
这一步主要创建orabm测试需要的表。
sqlplus system/pwd @orabm_tab
远程数据库使用:
sqlplus system/pwd@tnsname @orabm_tag
3) Load the data
导入测试所需的数据(orabmload在OS的对应版本的bin目录下)
$ orabmload Warehouses 1
远程数据库使用:
如果要测试的是远程数据库的话,
windows需要先set local=tnsname,tnsname是在tnsname.ora中配置的远程数据库的别名。
UNIX/LIINUX,需要先TWO_TASK=tnsname
$ orabmload Warehouses 1
4) create the indexes
这一步创建索引
sqlplus system/pwd @orabm_ind
远程数据库使用:
sqlplus system/pwd@tnsname @orabm_ind
5) analyze the tables and indexes
分析表和索引
sqlplus system/pwd @orabm_analyze
远程数据库使用:
sqlplus system/pwd@tnsname @orabm_analyze
6) create the stress-test PL/SQL procedures
创建压力测试所需的存储过程
sqlplus system/pwd @orabm_serverside_stress
远程数据库使用:
sqlplus system/pwd@tnsname @orabm_serverside_stress
7) cache the table and index data in the SGA
把表和索引都放到SGA中,原因在上文已经介绍了。
sqlplus system/pwd @orabm_cache
远程数据库使用:
sqlplus system/pwd@tnsname @orabm_cache
5. 至此安装完成。
现在我们就可以进行测试了。设置好测试数据库的ORACLE_SID环境变量,然后进入到bin目录下对应的OS目录(有linux,windows,solaris三个目录):
如果测试本地数据库:
$ orabm 1 20000
如果测试远程数据库,则执行
$ orabm 1 20000 tnsname
注意不要加"@"
orabm后接2个参数(如果测试远程的压力则接三个参数)。
第一个参数表示测试多少个并发(对应多个session)
第二个参数表示执行多少个事务(注意:不是所有的并发共执行多少事务,而是每个并发执行的事务数)
第三个参数是在测试远程数据库的时候用的,值为tnsnames.ora配置的远程数据库连接的别名
orabm 2 1000
表示用2个并发执行1000个事务
orabm 1,2,6,10 1000
表示分别用1、2、6、19个并发执行1000个事务
执行的结果会打印在屏幕上,同时写到orabm所在目录的orabm.<oracle_sid>.log。如果执行多次,则多次的执行结果都会追加到orabm.<oracle_sid>.log中。
输出结果示例:
---begin sess=1 txn=20000 ORACLE_SID=antispam Sat Aug 14 09:28:41 2010
ANTISPAM.US.ORACLE.COM txn(all)=20000 xn(sam)=15999 t(sam)=139 tps=115 sl=7904(49.4%) on=4860(30.4%) oi=3235(20.2%) end=140810-09:31:48
---end - Sat Aug 14 09:31:48 2010
---begin sess=2 txn=20000 ORACLE_SID=antispam Sat Aug 14 09:31:48 2010
ANTISPAM.US.ORACLE.COM txn(all)=20000 xn(sam)=15999 t(sam)=248 tps=65 sl=8114(50.7%) on=4828(30.2%) oi=3057(19.1%) end=140810-09:36:58
ANTISPAM.US.ORACLE.COM txn(all)=20000 xn(sam)=15999 t(sam)=249 tps=64 sl=8023(50.1%) on=4731(29.6%) oi=3245(20.3%) end=140810-09:36:59
---end - Sat Aug 14 09:36:59 2010
输出结果的说明:
txn(all)----代表Total transaction Count,总的事务数量.
xn(sam)-----采样的事务数量
t(sam)------采样事务运行的时间.
TPS是Transactions Per Second的缩写,也就是事务数/秒
tps的计算:每一个阶段所有session的tps相加就是当前测试的总tps了。
对于以上输出,在2个并发下,TPS值为65+64=129
为了保证准确性,TPS值只取中间的80%数据,头尾的10%都将被忽略.
sl=8114(50.7%) on=4828(30.2%) oi=3057(19.1%)的含义:
事务是松散的,基于标准的TPC-C测试的订单、库存事务模型,使用预定义的事务分布.
Stock-Level:Order-by-Customer-Name:Order-by-Customer-Id比例为50% :30% :20%
为了确保事务分布的正确性,ORABM_SERVERSIDE_STRESS的输出包含事务分割比例,输出结果具有随机波动,例如
sl=8114(50.7%) on=4828(30.2%) oi=3057(19.1%)
我们可以用orabm提供的脚本orabm_tps.sh格式化输出结果(linux下正常使用,windows下要安装一些linux加强工具):
orabm_tps.sh orabm.oracle9i.log
ORACLE_SID=oracle9i sess=1 tps=500
ORACLE_SID=oracle9i sess=3 tps=576
ORACLE_SID=oracle9i sess=1 tps=533
ORACLE_SID=oracle9i sess=2 tps=572
ORACLE_SID=oracle9i sess=6 tps=586
ORACLE_SID=oracle9i sess=10 tps=609
ORACLE_SID=oracle9i sess=15 tps=620
ORACLE_SID=oracle9i sess=20 tps=610
ORACLE_SID=oracle9i sess=25 tps=631
ORACLE_SID=oracle9i sess=30 tps=632
并非并发数越多,tps就越大,有时候随着并发的增多,tps反而减小。
如果发现随着并发的增大,tps并没有明显增加,或者反而减小了,则说明已经到了系统的瓶颈了。这个临界点可以看作是系统的所能承受最大tps了。