【DB笔试面试595】在Oracle中,I/O Calibration和DOP有什么关系?_Oracle

♣题目 部分

在Oracle中,I/O Calibration和DOP有什么关系?


     

♣答案部分


从Oracle 11.2.0.2开始,只有当I/O Calibration(I/O 校准、I/O统计信息)被收集才能使用自动并行度(DOP,Automatic Degree of Parallelism)。当PARALLEL_DEGREE_POLICY被设置为AUTO时,Oracle数据库将会基于执行计划中操作的成本和硬件特性来判断是否使用并行。如果一个PARALLEL Hint在语句级被使用,那么无论PARALLEL_DEGREE_POLICY的值设置成什么,自动并行度都将被开启。

若没有收集I/O Calibration统计数据,则在执行计划的Note部分可以看到“automatic DOP: skipped because of IO calibrate statistics are missing”这样的信息。若使用了DOP,则可以在执行计划的Note部分可以看到类似于“automatic DOP: Computed Degree of Parallelism is 2”的信息。

Oracle提供了PL/SQL包DBMS_RESOURCE_MANAGER.CALIBRATE_IO来收集I/O Calibration的统计数据。收集I/O Calibration统计数据的持续时间由NUM_DISKS变量与RAC中节点数决定的。视图V$IO_CALIBRATION_STATUS可以查询是否收集了I/O Calibration统计数据。若没有收集I/O Calibration,则可以使用如下的存储过程来收集:

 1SET SERVEROUTPUT ON 2DECLARE 3   lat INTEGER; 4   iops INTEGER; 5   mbps INTEGER; 6BEGIN 7    --DBMS_RESOURCE_MANAGER.CALIBRATE_IO(, ,iops, mbps, lat); 8    DBMS_RESOURCE_MANAGER.CALIBRATE_IO (1, 10, iops, mbps, lat); 9   DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);10   DBMS_OUTPUT.PUT_LINE ('latency = ' || lat);11   dbms_output.put_line('max_mbps = ' || mbps);12END;13/SET SERVEROUTPUT ON
 2DECLARE
 3   lat INTEGER;
 4   iops INTEGER;
 5   mbps INTEGER;
 6BEGIN
 7    --DBMS_RESOURCE_MANAGER.CALIBRATE_IO(, ,iops, mbps, lat);
 8    DBMS_RESOURCE_MANAGER.CALIBRATE_IO (1, 10, iops, mbps, lat);
 9   DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);
10   DBMS_OUTPUT.PUT_LINE ('latency = ' || lat);
11   dbms_output.put_line('max_mbps = ' || mbps);
12END;
13/

注意,DBMS_RESOURCE_MANAGER.CALIBRATE_IO的前两个参数分别为num_disks和max_latency是输入变量,并且有三个输出变量。

num_disks:为了获得最精确的结果,最好提供数据库所使用的真实物理磁盘数。如果是使用ASM来管理数据库文件,那么就是指存储数据的磁盘组,那么只有存储数据的磁盘组中的物理磁盘作为num_disks变量值,不包含FRA磁盘组中的物理磁盘。

latency:对数据库块I/O操作允许的最大延迟。