Oracle 11g内置的IO测试包

来源:互联网 发布:软件销售合同范本 编辑:程序博客网 时间:2024/05/16 11:32

Oracle 11g内置的IO测试包

这两天部门有个同事上新系统, 感觉Orion进行压力测试比较麻烦, 我印象中, Oracle 11g引入了一个进行IO压力测试的包, 具体的过程名包含Calibrat,就到自己测试环境的@?/rdbms/admin目录下查找了一把,得到了下列这些内容..

01--catrm.sql 是Resource Manager的基础包, 包含resource manager相关的系统视图信息,
02--通过这些视图可以知道当前Calibration进行的状态,以及Calibration结束之后系统的相关的统计信息.
03catrm.sql:Rem    vkolla      01/23/07 - use DBA_RSRC_IO_CALIBRATE
04catrm.sql:Rem    vkolla      11/13/06 - remove DBA_RSRC_IO_CALIBRATE
05catrm.sql:Rem    suelee      06/11/06 - Add IO calibration tables
06catrm.sql:-- create the view DBA_RSRC_IO_CALIBRATE
07catrm.sql:createor replace view DBA_RSRC_IO_CALIBRATE
08catrm.sql:  fromsys.resource_io_calibrate$
09catrm.sql:comment ontable DBA_RSRC_IO_CALIBRATE is
10catrm.sql:'Results of the most recent I/O calibration'
11catrm.sql:comment oncolumn DBA_RSRC_IO_CALIBRATE.START_TIMEis
12catrm.sql:'start time of the most recent I/O calibration'
13catrm.sql:comment oncolumn DBA_RSRC_IO_CALIBRATE.END_TIMEis
14catrm.sql:'end time of the most recent I/O calibration'
15catrm.sql:comment oncolumn DBA_RSRC_IO_CALIBRATE.MAX_IOPSis
16catrm.sql:comment oncolumn DBA_RSRC_IO_CALIBRATE.MAX_MBPSis
17catrm.sql:comment oncolumn DBA_RSRC_IO_CALIBRATE.MAX_PMBPSis
18catrm.sql:comment oncolumn DBA_RSRC_IO_CALIBRATE.LATENCYis
19catrm.sql:comment oncolumn DBA_RSRC_IO_CALIBRATE.NUM_PHYSICAL_DISKSis
20catrm.sql:createor replace public synonym DBA_RSRC_IO_CALIBRATE
21catrm.sql:   forDBA_RSRC_IO_CALIBRATE
22catrm.sql:grantselect on DBA_RSRC_IO_CALIBRATE to SELECT_CATALOG_ROLE
23--cdfixed.sql 是系统v$fixed_table相关的动态性能视图的生成脚本. 其中包含部分关于Calibration运行中的状态信息.
24cdfixed.sql:Rem    vkolla      01/23/07 - calibration_resultsto status
25cdfixed.sql:Rem    vkolla      11/17/06 - v$io_calibration_results
26cdfixed.sql:createor replace view v_$io_calibration_status
27cdfixed.sql:asselect * fromv$io_calibration_status;
28cdfixed.sql:createor replace public synonym v$io_calibration_status
29cdfixed.sql:                             for v_$io_calibration_status;
30cdfixed.sql:grantselect on v_$io_calibration_status to SELECT_CATALOG_ROLE;
31cdfixed.sql:createor replace view gv_$io_calibration_status
32cdfixed.sql:asselect * fromgv$io_calibration_status;
33cdfixed.sql:createor replace public synonym gv$io_calibration_status
34cdfixed.sql:                             for gv_$io_calibration_status;
35cdfixed.sql:grantselect on gv_$io_calibration_status to SELECT_CATALOG_ROLE;
36--dbmsrmad.sql 包含dbms_resource_manager相关的系统包的定义信息, 查看此脚本即可知道如何使用此calibration方法.
37dbmsrmad.sql:Rem    vkolla      08/07/06 - remove calibrate_modefrom calibrate_io
38dbmsrmad.sql:Rem    suelee      06/11/06 -Add IO calibration routines
39dbmsrmad.sql: -- Initiate an I/O calibration
40dbmsrmad.sql:  PROCEDUREcalibrate_io (
01sys@DBMAIN>descdbms_resource_manager
02PROCEDURE CALIBRATE_IO
03 Argument Name                  Type                   In/OutDefault?
04 ------------------------------ ----------------------- ------ --------
05 NUM_PHYSICAL_DISKS             BINARY_INTEGER         IN     DEFAULT
06 MAX_LATENCY                    BINARY_INTEGER         IN     DEFAULT
07 MAX_IOPS                       BINARY_INTEGER         OUT
08 MAX_MBPS                       BINARY_INTEGER         OUT
09 ACTUAL_LATENCY                 BINARY_INTEGER         OUT
10 
11--过程calibration_io有5个参数, 第一个参数输入本地的物理磁盘个数(不是看到的分区个数,或者通过存储输出的Lun的个数),随着指定的磁盘数目的变化,Calibrate_io也会与Orion一样最终会增加测试的压力, 可能的结果就是最后得到的iops/mbps的结果会稍好, 但是actual_latency的值会稍大.
12第二个参数为可接受的最大延迟. 我最初对此的理解是, 这是压力测试程序能够接受的最大延迟, 超过此可能就不再进行测试. 不过,经过测试,我感觉这个并不是严格的限制.
13第三个参数为测试出来的系统能够支撑的最大IOPS
14第四个参数为测试出来的系统能够支撑的最大MBPS
15第五个参数我个人估计应该是系统在最大IOPS时对应的响应时间.

下面为我在自己系统上运行的脚本以及其运行结果.

01sys@DBMAIN>settiming on serveroutput on
02sys@DBMAIN>declare
03  2    v_max_iops BINARY_INTEGER;
04  3    v_max_mbps BINARY_INTEGER;
05  4    v_act_lat BINARY_INTEGER;
06  begin
07  6    dbms_resource_manager.CALIBRATE_IO(1,20,v_max_iops,v_max_mbps,v_act_lat);
08  7    dbms_output.put_line('max iops : '|| v_max_iops );
09  8    dbms_output.put_line('max mbps : '|| v_max_mbps );
10  9    dbms_output.put_line('actual latency : '|| v_act_lat );
11 10  end;
12 11  /
13max iops : 64
14max mbps : 26
15actual latency : 14
16 
17PL/SQL proceduresuccessfully completed.
18 
19Elapsed: 00:11:32.29
20 
21--将num_disk设置成一个更大的数字后的测试效果.
22sys@DBMAIN>declare
23  2    v_max_iops BINARY_INTEGER;
24  3    v_max_mbps BINARY_INTEGER;
25  4    v_act_lat BINARY_INTEGER;
26  begin
27  6    dbms_resource_manager.CALIBRATE_IO(4,20,v_max_iops,v_max_mbps,v_act_lat);
28  7    dbms_output.put_line('max iops : '|| v_max_iops );
29  8    dbms_output.put_line('max mbps : '|| v_max_mbps );
30  9    dbms_output.put_line('actual latency : '|| v_act_lat );
31 10  end;
32 11  /
33max iops : 66--注意此处以及下面的两个值都变大了, iops/mbps增长的量很小, 真实IO延迟则大大提高了.
34max mbps : 33
35actual latency : 29
36 
37PL/SQL proceduresuccessfully completed.
38 
39Elapsed: 00:13:07.11
40 
41--calibrate_io执行后的相关测试结果也可以通过查询视图dba_rsrc_io_calibrate来获得.
42sys@DBMAIN>col start_time format a30
43sys@DBMAIN>col end_time format a30
44sys@DBMAIN>l
45  1* select* from dba_rsrc_io_calibrate
46sys@DBMAIN>/
47 
48START_TIME                     END_TIME                         MAX_IOPS   MAX_MBPS  MAX_PMBPS    LATENCY NUM_PHYSICAL_DISKS
49------------------------------ ------------------------------ ---------- ---------- ---------- ---------- ------------------
5005-APR-10 09.59.51.135124 AM   05-APR-10 10.12.58.120160 AM           66         33         17         29                  4
51 
52Elapsed: 00:00:00.01
53--查询此视图得到的相关结果与上面根据procedure的output参数得到的结果基本一致,唯一的例外是此处还有一个MAX_PMBPS列,此列表示单个进程最大可以达到的吞吐量(此处为17MB/s).

使用dbms_resource_manager.calibrate_io进行io测试需要系统支持异步IO, 也就是系统安装时必须安装有libaio(我所使用的RHEL 5.3使用的是libaio-0.3.106-3.2), 另外数据库的参数必须设置为支持异步IO.

01--如果数据库使用的是ASM,只要disk_asynch_io为True(默认值)就可以使用了
02sys@DBMAIN>show parameter disk_asynch_io
03NAME                                TYPE        VALUE
04------------------------------------ ----------- ------------------------------
05disk_asynch_io                       boolean    TRUE
06sys@DBMAIN>
07--如果数据库的数据文件是基于文件系统的,则还需要设置如下参数,它的默认值为none, 要支持异步IO,需要将此参数设置为asynch,并重启数据库才能生效.
08--alter system set filesystemio_options = asynch scope=spfile;
09--shutdown immediate;
10--startup
11sys@DBMAIN>show parameter filesystemio_options
12 
13NAME                                TYPE        VALUE
14------------------------------------ ----------- ------------------------------
15filesystemio_options                 string      none
16 
17--系统中哪些数据文件支持Async可以通过如下查询获得.
18sys@DBMAIN>col nameformat a50
19sys@DBMAIN>l
20  selectname,asynch_io fromv$datafile f,v$iostat_file i
21  wheref.file#=i.file_no
22  3* and(filetype_name='Data File'or filetype_name='Temp File')
23sys@DBMAIN>/
24 
25NAME                                              ASYNCH_IO
26-------------------------------------------------- ---------
27+DATA/dbmain/datafile/system.261.713375671         ASYNC_ON
28+DATA/dbmain/datafile/sysaux.262.713375711         ASYNC_ON
29+DATA/dbmain/datafile/sysaux.262.713375711         ASYNC_ON
30+DATA/dbmain/datafile/undotbs.263.713375731        ASYNC_ON
31+DATA/dbmain/datafile/test8k.265.713381589         ASYNC_ON
32+DATA/dbmain/datafile/indx.269.713798841           ASYNC_ON
33+DATA/dbmain/datafile/test.270.715172511           ASYNC_ON
34 
357 rowsselected.

本文参考以下内容:
Oracle的官方文档 DBMS_RESOURCE_MANAGER
Arup Nanda的博客文章 Resource Manager I/O Calibration in 11g

No related posts.

0 0
原创粉丝点击