使用TPCC-Orabm方法进行硬件选型

Orabm简介

Orabm实际上是一堆sql的集合,通过在用户指定的并发下运行指定数量的事务来测试系统性能.它主要测试数据库服务器的CPU性能和内存。

Orabm通过在每个用户指定的并发数据库会话(session) 中运行用户执行数量的数据库事务来进行工作.事务通过ORABM模式下的ORABM_SERVERSIDE_STRESS存储过程运行。对每个并发会话来说,ORABM_SERVERSIDE_STRESS运行在orabm命令行下指定的事务数,并返回该会话在采样间隔完成时的TPS.要确保所有并发会话都是在采样间隔期间处理事务,TPS值仅包括事务的中间的80%,初始的10%和最后的 10%将忽略掉。

Orabm使用环境

可以用在linux/windows/solaris下使用。Orabm不一定需要运行在数据库所在服务器上,它可以运行在任何安装了9i客户端的终端上。你可以用客户端连接到远程数据库来测试远程数据库的性能状况。

Orabm安装

1. 首先,在服务器上安装oracle 9i server版。Oracle 9i的安装方法此处略过。需注意的是,因为orabm主要测试的是CPU和内存,所以应该尽量避免其他因素影响测试,故为了更好的测试CPU和内存的性能,在建库时,最好将数据库缓存大小设成大于200M,这样,所有的数据都可以放在内存中,不会因为物理I/O而使得测试不准确。

注:Orabm只支持oracle 9i及之前版本。10g11g不支持。

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
导入测试所需的数据(orabmloadOS的对应版本的bin目录下)

$ orabmload Warehouses 1
远程数据库使用:

如果要测试的是远程数据库的话,

windows
需要先set local=tnsnametnsname是在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. 至此安装完成。

使用orabm进行测试

现在我们就可以进行测试了。设置好测试数据库的ORACLE_SID环境变量,然后进入到bin目录下对应的OS目录(有linuxwindowssolaris三个目录):
如果测试本地数据库:

$ orabm 1 20000

如果测试远程数据库,则执行

$ orabm 1 20000 tnsname
注意不要加
"@"

orabm
后接2个参数(如果测试远程的压力则接三个参数)。

第一个参数表示测试多少个并发(对应多个session

第二个参数表示执行多少个事务(注意:不是所有的并发共执行多少事务,而是每个并发执行的事务数)

第三个参数是在测试远程数据库的时候用的,值为tnsnames.ora配置的远程数据库连接的别名

orabm 2 1000
表示用2个并发执行1000个事务


orabm 1,2,6,10 1000
表示分别用12619个并发执行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)------
采样事务运行的时间.

TPSTransactions Per Second的缩写,也就是事务数/
tps
的计算:每一个阶段所有sessiontps相加就是当前测试的总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了。

你可能感兴趣的:(oracle,sql,windows,linux,SQL Server)