Oracle 11g数据库中提供了DBMS_RESOURCE_MANAGER.CALIBRATE_IO PL/SQL过程用于对当前数据库实例的I/O性能进行测试。
DBMS_RESOURCE_MANAGER.CALIBRATE_IO的参数如下:
DBMS_RESOURCE_MANAGER.CALIBRATE_IO (
num_physical_disks IN PLS_INTEGER DEFAULT 1,
max_latency IN PLS_INTEGER DEFAULT 20,
max_iops OUT PLS_INTEGER,
max_mbps OUT PLS_INTEGER,
actual_latency OUT PLS_INTEGER);
可以使用如下方法进行调用测试:
SET SERVEROUTPUT ON
DECLARE
lat INTEGER;
iops INTEGER;
mbps INTEGER;
BEGIN
-- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (<DISKS>, <MAX_LATENCY>, iops, mbps, lat);
DBMS_RESOURCE_MANAGER.CALIBRATE_IO (1, 100, iops, mbps, lat);
DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);
DBMS_OUTPUT.PUT_LINE ('latency = ' || lat);
DBMS_OUTPUT.PUT_LINE ('max_mbps = ' || mbps);
end;
/
其中num_physical_disks参数根据当前系统中的disk个数进行设置,在虚拟环境中,可能要选取不同的数值进行测试比较,以获得最佳测试效果。
测试实例####
以下为在虚拟机中的oracle rdbms 11.2.0.4测试的情况,分别选取num_physical_disks为1、2、3、4进行比较。
测试成绩如下:
num_physical_disks=1#####
max_iops = 118
latency = 10
max_mbps = 12
num_physical_disks=2#####
max_iops = 126
latency = 9
max_mbps = 16
num_physical_disks=3#####
max_iops = 110
latency = 11
max_mbps = 16
num_physical_disks=4#####
max_iops = 102
latency = 12
max_mbps = 14
可以看出,在我当前环境中,当num_physical_disks=2,测试可以获取最佳的I/O性能。
和Oracle Orion比较####
和Oracle orion工具相比,使用DBMS_RESOURCE_MANAGER.CALIBRATE_IO方法进行I/O性能测试,是在真实的oracle实例环境中测试,相对Oracle orion使用程序模拟Oracle的I/O操作更能反映真实情况。
但是DBMS_RESOURCE_MANAGER.CALIBRATE_IO需要首先有Oracle 实例存在,而且测试结果和控制参数过于简单,不便于根据真实系统进行调整。而Oracle orion有比较多的控制参数,可以用来在实施数据库之前对I/O子系统性能进行评估。
一些研究####
async IO?#####
把Oracle orion和DBMS_RESOURCE_MANAGER.CALIBRATE_IO两种方法测试出来的性能进行比较,发现DBMS_RESOURCE_MANAGER.CALIBRATE_IO的测试结果要远远低于Oracle orion。
看了一下文档,发现dbf的async IO没开。
使用alter system set filesystemio_options='asynch' scope=spfile打开async IO,然后重启数据库实例。
重新运行测试,结果如下:
max_iops = 120
latency = 98
max_mbps = 18
(这个结果和没开async IO差别不大啊),还得继续研究。
|