11g特性之IO校準

IO校準(IO Calibration)特性可以幫助我們瞭解存儲系統的真實性能,以進一步判斷I/O性能問題是由數據庫還是存儲系統自身引起的。I/O校準特性(IO Calibration)通過對Oracle數據文件的隨機I/O訪問存儲介質,其結論值更符合數據庫IO性能的真實情況。
在使用該特性前,我們要確保滿足以下條件:

  • 調用該存儲過程需要用到SYSDBA權限
  • TIME_STATISTICS 參數爲true:

SQL> show parameter timed_statistics;

NAME TYPE VALUE
———————————— ———– ——————————
timed_statistics boolean TRUE

  • 必須打開異步IO;注意在使用文件系統時,FILESYSTEMIO_OPTIONS需設爲SETALL或ASYNC,否則Oracle不會啓用異步IO。
  • 可以通過以下查詢檢驗是否啓用了異步IO:
SQL> SELECT NAME, ASYNCH_IO
2    FROM V$DATAFILE F, V$IOSTAT_FILE I
3   WHERE F.FILE# = I.FILE_NO
4     AND FILETYPE_NAME = 'Data File';

NAME                                                                             ASYNCH_IO
-------------------------------------------------------------------------------- ---------
D:\TOOLS\ADMINSTRATOR\11G\ORADATA\PROD\DATAFILE\O1_MF_SYSTEM_65DN8HXT_.DBF       ASYNC_ON
D:\TOOLS\ADMINSTRATOR\11G\ORADATA\PROD\DATAFILE\O1_MF_SYSAUX_65DN8J18_.DBF       ASYNC_ON
D:\TOOLS\ADMINSTRATOR\11G\ORADATA\PROD\DATAFILE\O1_MF_UNDOTBS1_65DN8J1S_.DBF     ASYNC_ON
D:\TOOLS\ADMINSTRATOR\11G\ORADATA\PROD\DATAFILE\O1_MF_USERS_65DN8J2X_.DBF        ASYNC_ON

IO Calibration特性可以通過DBMS_RESOURCE_MANAGER.CALIBRATE_IO存儲過程調用;該過程會對Oracle數據文件引發一系列IO敏感的只讀工作負載(由1MB大小的隨機IO組成),從而判斷存儲系統所能持續的最大IOPS(每秒最大IO請求數)和MBPS(每秒IO傳輸速率)。爲了使結果更具代表性,應當保持IO Calibration測試過程中整個數據庫是空閒的,沒有其他IO負載損耗。

讓我們具體來看一下CALIBRATE_IO存儲過程的調用方法:

 -- Initiate an I/O calibration
 --
 -- Input arguments:
 --  num_physical_disks   - Approximate number of physical disks in
 --                         the database storage
 --  max_latency          - Maximum tolerable latency in milliseconds for
 --                         database-block-sized IO requests
 --
 -- Output arguments:
 --  max_iops       - Maximum number of I/O requests per second that can be
 --                   sustained.  The I/O requests are randomly-distributed,
 --                   database-block-sized reads.
 --  max_mbps       - Maximum throughput of I/O that can be sustained,
 --                   expressed in megabytes per second. The I/O requests
 --                   are randomly-distributed, 1 megabyte reads.
 --  actual_latency - Average latency of database-block-sized I/O
 --                   requests at "max_iops" rate, expressed in milliseconds.
 --
  PROCEDURE 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
   );

其中輸入參數num_physical_disks用以指定數據庫存儲所用物理磁盤的近似數;max_latency指定了客戶所能容忍的最大IO 延遲時間,單位爲ms;一般我們認爲IO平均等待在10ms左右是一種較好的表現,遠大於這個數字往往說明IO負載過高了,這裏我們假定15ms是我們的deadline。

SQL> set serveroutput on;
SQL> DECLARE
  2    lat  INTEGER;
  3    iops INTEGER;
  4    mbps INTEGER;
  5  BEGIN
  6  -- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (disk_count,max_latency , iops, mbps, lat);
  7     DBMS_RESOURCE_MANAGER.CALIBRATE_IO (2, 15, iops, mbps, lat);
  8
  9    DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);
 10    DBMS_OUTPUT.PUT_LINE ('latency  = ' || lat);
 11    dbms_output.put_line('max_mbps = ' || mbps);
 12  end;
 13  /

max_iops = 127
latency  = 15
max_mbps = 38

上面的輸出信息中的max_iops=2643,說明IO子系統的每秒IO請求次數是2643次,latency=8,說明IO子系統的延遲是8ms。max_mbps=388,說明每少的最大處理能力是388MB。

在dbms_resource_manager.calibrate_io執行時可以查看其狀態  SQL> select * from V$IO_CALIBRATION_STATUS;

STATUS        CALIBRATION_TIME ------------- ----------------------------- IN PROGRESS

在dbms_resource_manager.calibrate_io執行完後可以查看其結果  SQL> select * from DBA_RSRC_IO_CALIBRATE;

START_TIME                        END_TIME                          MAX_IOPS  MAX_MBPS  MAX_PMBPS    LATENCY NUM_PHYSICAL_DISKS ---------------------------------- -------------------------------- ---------- ---------- ---------- ---------- ------------------ 11-OCT-16 04.53.17.202399 PM      11-OCT-16 05.02.21.056682 PM          2643        388        39          8                  2

這個功能相對於Oracle提供的Orion工具來說使用更簡單,但它必須創建數據庫並且在11g及以後版本才能使用。

PL/SQL procedure successfully completed /*平均延遲爲15ms時,最大iops爲127,mbps爲38*/ /*執行過程中也可以通過V$IO_CALIBRATION_STATUS視圖瞭解進度*/ SQL> select * from V$IO_CALIBRATION_STATUS; STATUS CALIBRATION_TIME ------------- -------------------------------------------------------------------------------- IN PROGRESS 11-8月 -10 12.02.35.121 下午 SQL> alter session set nls_timestamp_format='HH24:MI'; Session altered SQL> col start_time for a10; SQL> col end_time for a10; SQL> select * from DBA_RSRC_IO_CALIBRATE; START_TIME END_TIME MAX_IOPS MAX_MBPS MAX_PMBPS LATENCY NUM_PHYSICAL_DISKS ---------- ---------- ---------- ---------- ---------- ---------- ------------------ 12:55 12:59 127 38 14 15 2 /*DBA_RSRC_IO_CALIBRATE視圖記錄了IO CALIBRATION的歷史信息*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章