Introduced in Oracle Database 11g Release 1, the CALIBRATE_IO procedure gives an idea of the capabilities of the storage system from within Oracle. There are a few restrictions associated with the procedure.
- The procedure must be called by a user with the SYSDBA priviledge.
TIMED_STATISTICSmust be set to TRUE, which is the default whenSTATISTICS_LEVELis set to TYPICAL.- Datafiles must be accessed using asynchronous I/O. This is the default when ASM is used.
SQL> SQL> SELECT d.name,
2 i.asynch_io
3 FROM v$datafile d,
4 v$iostat_file i
5 WHERE d.file# = i.file_no
6 AND i.filetype_name = 'Data File';
NAME
ASYNCH_IO
+DATA/JYC/DATAFILE/system.259.1216240375
ASYNC_ON
+DATA/JYC/DATAFILE/sysaux.260.1216240429
ASYNC_ON
+DATA/JYC/DATAFILE/undotbs1.261.1216240455
ASYNC_ON
NAME
ASYNCH_IO
+DATA/JYC/86B637B62FE07A65E053F706E80A27CA/DATAFILE/system.267.1216240805
ASYNC_ON
+DATA/JYC/86B637B62FE07A65E053F706E80A27CA/DATAFILE/sysaux.268.1216240805
ASYNC_ON
+DATA/JYC/DATAFILE/users.262.1216240455
ASYNC_ON
NAME
ASYNCH_IO
+DATA/JYC/86B637B62FE07A65E053F706E80A27CA/DATAFILE/undotbs1.269.1216240805
ASYNC_ON
+DATA/JYC/DATAFILE/undotbs2.271.1216241127
ASYNC_ON
+DATA/JYC/42B133224FC259CDE0634CCFA8C0B908/DATAFILE/system.276.1216241607
ASYNC_ON
NAME
ASYNCH_IO
+DATA/JYC/42B133224FC259CDE0634CCFA8C0B908/DATAFILE/sysaux.277.1216241607
ASYNC_ON
+DATA/JYC/42B133224FC259CDE0634CCFA8C0B908/DATAFILE/undotbs1.275.1216241607
ASYNC_ON
+DATA/JYC/42B133224FC259CDE0634CCFA8C0B908/DATAFILE/undo_2.279.1216241665
ASYNC_ON
NAME
ASYNCH_IO
+DATA/JYC/42B133224FC259CDE0634CCFA8C0B908/DATAFILE/users.280.1216241667
ASYNC_ON
13 rows selected.Elapsed: 00:00:00.17
SQL> show parameter STATISTICS_LEVEL ;
NAME TYPE VALUE
client_statistics_level string TYPICAL
statistics_level string TYPICAL
SQL>
oracle@rac1:/home/oracle$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Sun Nov 23 14:07:13 2025
Version 19.9.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.9.0.0.0
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO
SQL> alter session set container=pdb;
Session altered.
SQL>
SET SERVEROUTPUT ON
DECLARE
l_latency PLS_INTEGER;
l_iops PLS_INTEGER;
l_mbps PLS_INTEGER;
BEGIN
DBMS_RESOURCE_MANAGER.calibrate_io (num_physical_disks => 1,
max_latency => 20,
max_iops => l_iops,
max_mbps => l_mbps,
actual_latency => l_latency);
DBMS_OUTPUT.put_line('Max IOPS = ' || l_iops);
DBMS_OUTPUT.put_line('Max MBPS = ' || l_mbps);
DBMS_OUTPUT.put_line('Latency = ' || l_latency);
END;
/
SQL>
DECLARE
*
ERROR at line 1:
ORA-65040: operation not allowed from within a pluggable database
ORA-06512: at "SYS.DBMS_RMIN_SYS", line 4469
ORA-06512: at "SYS.DBMS_RESOURCE_MANAGER", line 1210
ORA-06512: at line 6
SQL> conn / as sysdba
Connected.
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO
SQL> set timing on
SQL> SET SERVEROUTPUT ON
DECLARE
l_latency PLS_INTEGER;
l_iops PLS_INTEGER;
l_mbps PLS_INTEGER;
BEGIN
DBMS_RESOURCE_MANAGER.calibrate_io (num_physical_disks => 1,
max_latency => 20,
max_iops => l_iops,
SQL> 2 3 4 5 6 7 8 9 max_mbps => l_mbps,
10 actual_latency => l_latency);
11
12 DBMS_OUTPUT.put_line('Max IOPS = ' || l_iops);
13 DBMS_OUTPUT.put_line('Max MBPS = ' || l_mbps);
14 DBMS_OUTPUT.put_line('Latency = ' || l_latency);
15 END;
16 /
max_iops = 157
latency = 49.277
max_mbps = 19
Note: The high I/O latencies from the calibration run indicate that the
calibration I/Os are being serviced mostly from disk. If your storage has a
cache, you may achieve better results by rerunning. Rerunning will warm or
populate the storage cache.
Max IOPS = 157
Max MBPS = 19
Latency = 49
PL/SQL procedure successfully completed.
Elapsed: 00:09:13.27
SET LINESIZE 100
COLUMN start_time FORMAT A20
COLUMN end_time FORMAT A20
SELECT TO_CHAR(start_time, 'DD-MON-YYY HH24:MI:SS') AS start_time,
TO_CHAR(end_time, 'DD-MON-YYY HH24:MI:SS') AS end_time,
max_iops,
max_mbps,
max_pmbps,
latency,
num_physical_disks AS disks
FROM dba_rsrc_io_calibrate;
SQL> SET LINESIZE 100
SQL> COLUMN start_time FORMAT A20
SQL> COLUMN end_time FORMAT A20
SQL>
SQL> SELECT TO_CHAR(start_time, 'DD-MON-YYY HH24:MI:SS') AS start_time,
2 TO_CHAR(end_time, 'DD-MON-YYY HH24:MI:SS') AS end_time,
3 max_iops,
4 max_mbps,
5 max_pmbps,
6 latency,
7 num_physical_disks AS disks
8 FROM dba_rsrc_io_calibrate;
START_TIME END_TIME MAX_IOPS MAX_MBPS MAX_PMBPS LATENCY DISKS
23-NOV-025 14:07:45 23-NOV-025 14:16:58 157 19 19 49.277 1
Elapsed: 00:00:00.07
SQL>

https://oracle-base.com/articles/misc/measuring-storage-performance-for-oracle-systems