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效能不會經常性發生變化。