这两天部门有个同事上新系统, 感觉Orion进行压力测试比较麻烦, 我印象中, Oracle
11g引入了一个进行IO压力测试的包,
具体的过程名包含Calibrat,就到自己测试环境的@?/rdbms/admin目录下查找了一把,得到了下列这些内容..
--catrm.sql 是Resource Manager的基础包, 包含resource manager相关的系统视图信息,
--通过这些视图可以知道当前Calibration进行的状态,以及Calibration结束之后系统的相关的统计信息.
catrm.sql:Rem vkolla 01/23/07 - use DBA_RSRC_IO_CALIBRATE
catrm.sql:Rem vkolla 11/13/06 - remove DBA_RSRC_IO_CALIBRATE
catrm.sql:Rem suelee 06/11/06 - Add IO calibration tables
catrm.sql:-- create the view DBA_RSRC_IO_CALIBRATE
catrm.sql:create or replace view DBA_RSRC_IO_CALIBRATE
catrm.sql: from sys.resource_io_calibrate$
catrm.sql:comment on table DBA_RSRC_IO_CALIBRATE is
catrm.sql:'Results of the most recent I/O calibration'
catrm.sql:comment on column DBA_RSRC_IO_CALIBRATE.START_TIME is
catrm.sql:'start time of the most recent I/O calibration'
catrm.sql:comment on column DBA_RSRC_IO_CALIBRATE.END_TIME is
catrm.sql:'end time of the most recent I/O calibration'
catrm.sql:comment on column DBA_RSRC_IO_CALIBRATE.MAX_IOPS is
catrm.sql:comment on column DBA_RSRC_IO_CALIBRATE.MAX_MBPS is
catrm.sql:comment on column DBA_RSRC_IO_CALIBRATE.MAX_PMBPS is
catrm.sql:comment on column DBA_RSRC_IO_CALIBRATE.LATENCY is
catrm.sql:comment on column DBA_RSRC_IO_CALIBRATE.NUM_PHYSICAL_DISKS is
catrm.sql:create or replace public synonym DBA_RSRC_IO_CALIBRATE
catrm.sql: for DBA_RSRC_IO_CALIBRATE
catrm.sql:grant select on DBA_RSRC_IO_CALIBRATE to SELECT_CATALOG_ROLE
--cdfixed.sql 是系统v$fixed_table相关的动态性能视图的生成脚本. 其中包含部分关于Calibration运行中的状态信息.
cdfixed.sql:Rem vkolla 01/23/07 - calibration_results to status
cdfixed.sql:Rem vkolla 11/17/06 - v$io_calibration_results
cdfixed.sql:create or replace view v_$io_calibration_status
cdfixed.sql:as select * from v$io_calibration_status;
cdfixed.sql:create or replace public synonym v$io_calibration_status
cdfixed.sql: for v_$io_calibration_status;
cdfixed.sql:grant select on v_$io_calibration_status to SELECT_CATALOG_ROLE;
cdfixed.sql:create or replace view gv_$io_calibration_status
cdfixed.sql:as select * from gv$io_calibration_status;
cdfixed.sql:create or replace public synonym gv$io_calibration_status
cdfixed.sql: for gv_$io_calibration_status;
cdfixed.sql:grant select on gv_$io_calibration_status to SELECT_CATALOG_ROLE;
--dbmsrmad.sql 包含dbms_resource_manager相关的系统包的定义信息, 查看此脚本即可知道如何使用此calibration方法.
dbmsrmad.sql:Rem vkolla 08/07/06 - remove calibrate_mode from calibrate_io
dbmsrmad.sql:Rem suelee 06/11/06 - Add IO calibration routines
dbmsrmad.sql: -- Initiate an I/O calibration
dbmsrmad.sql: PROCEDURE calibrate_io (
sys@DBMAIN>desc dbms_resource_manager
PROCEDURE CALIBRATE_IO
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
NUM_PHYSICAL_DISKS BINARY_INTEGER IN DEFAULT
MAX_LATENCY BINARY_INTEGER IN DEFAULT
MAX_IOPS BINARY_INTEGER OUT
MAX_MBPS BINARY_INTEGER OUT
ACTUAL_LATENCY BINARY_INTEGER OUT
--过程calibration_io有5个参数, 第一个参数输入本地的物理磁盘个数(不是看到的分区个数,或者通过存储输出的Lun的个数),随着指定的磁盘数目的变化,Calibrate_io也会与Orion一样最终会增加测试的压力, 可能的结果就是最后得到的iops/mbps的结果会稍好, 但是actual_latency的值会稍大.
第二个参数为可接受的最大延迟. 我最初对此的理解是, 这是压力测试程序能够接受的最大延迟, 超过此可能就不再进行测试. 不过,经过测试,我感觉这个并不是严格的限制.
第三个参数为测试出来的系统能够支撑的最大IOPS
第四个参数为测试出来的系统能够支撑的最大MBPS
第五个参数我个人估计应该是系统在最大IOPS时对应的响应时间.
下面为我在自己系统上运行的脚本以及其运行结果.
sys@DBMAIN>set timing on serveroutput on
sys@DBMAIN>declare
2 v_max_iops BINARY_INTEGER;
3 v_max_mbps BINARY_INTEGER;
4 v_act_lat BINARY_INTEGER;
5 begin
6 dbms_resource_manager.CALIBRATE_IO(1,20,v_max_iops,v_max_mbps,v_act_lat);
7 dbms_output.put_line('max iops : ' || v_max_iops );
8 dbms_output.put_line('max mbps : ' || v_max_mbps );
9 dbms_output.put_line('actual latency : ' || v_act_lat );
10 end;
11 /
max iops : 64
max mbps : 26
actual latency : 14
PL/SQL procedure successfully completed.
Elapsed: 00:11:32.29
--将num_disk设置成一个更大的数字后的测试效果.
sys@DBMAIN>declare
2 v_max_iops BINARY_INTEGER;
3 v_max_mbps BINARY_INTEGER;
4 v_act_lat BINARY_INTEGER;
5 begin
6 dbms_resource_manager.CALIBRATE_IO(4,20,v_max_iops,v_max_mbps,v_act_lat);
7 dbms_output.put_line('max iops : ' || v_max_iops );
8 dbms_output.put_line('max mbps : ' || v_max_mbps );
9 dbms_output.put_line('actual latency : ' || v_act_lat );
10 end;
11 /
max iops : 66 --注意此处以及下面的两个值都变大了, iops/mbps增长的量很小, 真实IO延迟则大大提高了.
max mbps : 33
actual latency : 29
PL/SQL procedure successfully completed.
Elapsed: 00:13:07.11
--calibrate_io执行后的相关测试结果也可以通过查询视图dba_rsrc_io_calibrate来获得.
sys@DBMAIN>col start_time format a30
sys@DBMAIN>col end_time format a30
sys@DBMAIN>l
1* select * from dba_rsrc_io_calibrate
sys@DBMAIN>/
START_TIME END_TIME MAX_IOPS MAX_MBPS MAX_PMBPS LATENCY NUM_PHYSICAL_DISKS
------------------------------ ------------------------------ ---------- ---------- ---------- ---------- ------------------
05-APR-10 09.59.51.135124 AM 05-APR-10 10.12.58.120160 AM 66 33 17 29 4
Elapsed: 00:00:00.01
--查询此视图得到的相关结果与上面根据procedure的output参数得到的结果基本一致,唯一的例外是此处还有一个MAX_PMBPS列,此列表示单个进程最大可以达到的吞吐量(此处为17MB/s).
使用dbms_resource_manager.calibrate_io进行io测试需要系统支持异步IO,
也就是系统安装时必须安装有libaio(我所使用的RHEL 5.3使用的是libaio-0.3.106-3.2),
另外数据库的参数必须设置为支持异步IO.
--如果数据库使用的是ASM,只要disk_asynch_io为True(默认值)就可以使用了
sys@DBMAIN>show parameter disk_asynch_io
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
disk_asynch_io boolean TRUE
sys@DBMAIN>
--如果数据库的数据文件是基于文件系统的,则还需要设置如下参数,它的默认值为none, 要支持异步IO,需要将此参数设置为asynch,并重启数据库才能生效.
--alter system set filesystemio_options = asynch scope=spfile;
--shutdown immediate;
--startup
sys@DBMAIN>show parameter filesystemio_options
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
filesystemio_options string none
--系统中哪些数据文件支持Async可以通过如下查询获得.
sys@DBMAIN>col name format a50
sys@DBMAIN>l
1 select name,asynch_io from v$datafile f,v$iostat_file i
2 where f.file#=i.file_no
3* and (filetype_name='Data File' or filetype_name='Temp File')
sys@DBMAIN>/
NAME ASYNCH_IO
-------------------------------------------------- ---------
+DATA/dbmain/datafile/system.261.713375671 ASYNC_ON
+DATA/dbmain/datafile/sysaux.262.713375711 ASYNC_ON
+DATA/dbmain/datafile/sysaux.262.713375711 ASYNC_ON
+DATA/dbmain/datafile/undotbs.263.713375731 ASYNC_ON
+DATA/dbmain/datafile/test8k.265.713381589 ASYNC_ON
+DATA/dbmain/datafile/indx.269.713798841 ASYNC_ON
+DATA/dbmain/datafile/test.270.715172511 ASYNC_ON
7 rows selected.
本文参考以下内容:
Oracle的官方文档DBMS_RESOURCE_MANAGER
Arup Nanda的博客文章Resource Manager I/O Calibration in 11g
No related posts.