1. 程式人生 > >Oracle 11g中的IO Calibrate(automatic DOP: skipped because of IO calibrate statistics are missing)

Oracle 11g中的IO Calibrate(automatic DOP: skipped because of IO calibrate statistics are missing)

Oracle 11g有兩個對於效能方面的測試工具,一個就是RAT(Real Application Test),另一個就是IO校準(Calibrate IO)。RAT是一種負載重演元件,當進行系統軟硬體升級的時候,我們一個很關注的問題是:此次變化能否提升系統性能、能提升多少,會不會有新的瓶頸。這個在過去是不能實現的,只能夠在升級之後通過實踐去發現。但是RAT可以捕獲實際系統負載情況,將其在新環境下進行重演,並且進行度量比較。IO調教的作用也是IO負載模擬,從而判斷出實際真實的系統IO情況。 正常情況下,IO是會自動校準的,可以得知具體的併發數;

explain plan for select /*+parallel*/ * from scott.emp;
     select * from table(dbms_xplan.display);
那麼這裡我怎麼知道cbo計算的實際的併發數呢?
2種方式
1.通過v$pq_slave
2.通過執行計劃的auto dop提示

在這裡插入圖片描述 可以看到,此時的實際併發數為2;

如果dop提示為:automatic DOP: skipped because of IO calibrate statistics are missing 那麼表示dop無法自動校準io,這個可能會影響執行計劃的併發度;從而影響查詢影響

11g中有一個檢視v$io_calibration_status,記錄了系統進行校準狀態。和統計量不同,Oracle是不會自動進行IO校準的,而需要DBA手工完成。
select * from v$io_calibration_status;--狀態
select * from DBA_RSRC_IO_CALIBRATE;--校準結果
此時是空的;
那麼如何使dop能夠正常工作呢?
呼叫: dbms_resource_manager.calibrate_io這個過程;


 在執行 i/o 校準之前, 請確保滿足以下要求:
1必須授予使用者許可權SYSDBA
2 timed_statistics必須設定為TRUE
show parameter timed_statistics
NAME                                 TYPE        VALUE
------------------------------------ ----------- -----
timed_statistics                     boolean     TRUE

3必須啟用非同步 i/o
show parameter disk_asy
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
disk_asynch_io                       boolean     TRUE
4通過執行以下查詢, 確保為資料檔案啟用了非同步 i/o:
COL NAME FORMAT A50
SELECT NAME,ASYNCH_IO FROM V$DATAFILE F,V$IOSTAT_FILE I
WHERE  F.FILE#=I.FILE_NO
AND    FILETYPE_NAME='Data File';

--入參
desc dbms_resource_manager.calibrate_io
Parameter          Type           Mode Default? 
------------------ -------------- ---- -------- 
NUM_PHYSICAL_DISKS BINARY_INTEGER IN   Y        
MAX_LATENCY        BINARY_INTEGER IN   Y        
MAX_IOPS            BINARY_INTEGER OUT           
MAX_MBPS           BINARY_INTEGER OUT           
ACTUAL_LATENCY     BINARY_INTEGER OUT    

呼叫的過程如下:

declare
   lat integer;
   iops integer;
   mbps integer;
begin
 
   dbms_resource_manager.calibrate_io(2,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;

入參: NUM_PHYSICAL_DISKS: 物理磁碟的大致數量 MAX_LATENCY:此工作負荷的平均延遲。當您需要特定的目標延遲時, 可以使用輸入引數指定目標延遲 (為資料庫塊大小的 IO 請求指定最大可容忍延遲 (毫秒) 出參: MAX_IOPS : 該過程將隨機資料庫塊大小讀取 (預設情況下為 8 KB) 從所有資料庫例項中的所有資料檔案中發出。此步驟提供了資料庫可以維持的最大 IOPS (輸出引數)。 ACTUAL_LATENCY:實際延遲數; MAX_MBPS:這個應該是IO每秒的吞吐量每秒MB;

校驗時間可能會比較長,我這裡暗影精靈2,win10 1803版本,花了271.367s

在這裡插入圖片描述

啟動校準之後,Oracle生成大量的IO操作,來判斷儲存的極限。這個過程也就是讓我們瞭解當前IO架構的上限。 在執行過程中,我們可檢視校準狀態v$io_calibration_status。 I/O校準成功完成後,可以檢視校準結果 DBA_RSRC_IO_CALIBRATE表;

select aa.STATUS,to_char(aa.CALIBRATION_TIME,‘yyyy-mm-dd hh24:mi:ss:ff3’) from v$io_calibration_status aa; 在這裡插入圖片描述

select to_char(aa.start_time, ‘yyyy-mm-dd hh24:mi:ss:ff3’) start_time, to_char(aa.end_time, ‘yyyy-mm-dd hh24:mi:ss:ff3’) end_time, aa.max_iops, aa.max_mbps, aa.max_pmbps, aa.latency, aa.num_physical_disks from DBA_RSRC_IO_CALIBRATE aa;

在這裡插入圖片描述

IO校準後,Auto DOP就可以正常工作了;

Oracle自動化、智慧化過程中,是需要提供很多輔助資訊的。 Calibrate IO是一個重要方面。Oracle不進行自動的Calibrate IO統計量的原因大體有三個: 首先是Oracle並不知道實際磁碟的標準指標。 第二是Oracle校準過程生成很大的IO,如果不慎會引起很大產品問題。 第三是Disk IO效能不會經常性發生變化。