set serveroutput on size unlimited set time on timing on echo on declare max_iops integer; max_mbps integer; actual_latency integer; begin dbms_resource_manager.calibrate_io ( num_physical_disks => 48, max_latency => 10, max_iops => max_iops, max_mbps => max_mbps, actual_latency => actual_latency); dbms_output.put_line (‘IOPS = ‘|| max_iops); dbms_output.put_line (‘MBPS = ‘|| max_mbps); dbms_output.put_line (‘Latency = ‘|| actual_latency); end; /
Here’s some notes for you to think about:
1. num_physical_disks is not the number of LUNs. It is the number of disks the LUNs are comprised of.
2. The default max_latency is set to 20 milliseconds if you do not provide a value for this parameter. This parameter defines the maximum tolerable latency for database I/O requests. We should set this to a value of 10
The output for this stored procedure will be max IOPs (maximum number of randomly distributed I/O requests per second that can be sustained) and MBPS (maximum throughput for I/O that can be sustained)
The calibration result is available from the V$IO_CALIBRATION_STATUS view. Successful calibration results are located in DBA_RSRC_IO_CALIBRATE table.
Only one calibration can be executed at the same time, and you need SYSDBA privileges to execute this stored procedure.
You can leverage the print_table from TomKyte’s website:
SQL> exec print_table(‘ select inst_id, status, calibration_time from gv$io_calibration_status’); INST_ID : 1 STATUS : IN PROGRESS CALIBRATION_TIME :
Eventually, the status from change to a READY state. Now, you can query the DBA_RSRC_IO_CALIBRATE view:
exec print_table(‘select * from dba_rsrc_io_calibrate’);