【DB筆試面試595】在Oracle中,I/O Calibration和DOP有什麼關係?

  • 2019 年 10 月 10 日
  • 筆記

題目部分

在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,則可以使用如下的存儲過程來收集:

SET SERVEROUTPUT ON  DECLARE     lat INTEGER;     iops INTEGER;     mbps INTEGER;  BEGIN      --DBMS_RESOURCE_MANAGER.CALIBRATE_IO(, ,iops, mbps, lat);      DBMS_RESOURCE_MANAGER.CALIBRATE_IO (1, 10, iops, mbps, lat);     DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);     DBMS_OUTPUT.PUT_LINE ('latency = ' || lat);     dbms_output.put_line('max_mbps = ' || mbps);  END;  /  

注意,DBMS_RESOURCE_MANAGER.CALIBRATE_IO的前兩個參數分別為num_disks和max_latency是輸入變數,並且有三個輸出變數。

num_disks:為了獲得最精確的結果,最好提供資料庫所使用的真實物理磁碟數。如果是使用ASM來管理資料庫文件,那麼就是指存儲數據的磁碟組,那麼只有存儲數據的磁碟組中的物理磁碟作為num_disks變數值,不包含FRA磁碟組中的物理磁碟。

latency:對資料庫塊I/O操作允許的最大延遲。

& 說明:

有關什麼是I/O Calibration的更多內容可以參考我的BLOG:http://blog.itpub.net/26736162/viewspace-2148709/

本文選自《Oracle程式設計師面試筆試寶典》,作者:李華榮。