CALIBRATE_IO is yet another popular database simulation/stress test utility, mainly used to perform IO benchmarks.


Procedure, that is part of DBMS_RESOURCE_MANAGER package, will generate read-only workload made up of 1 MB of random of I/Os to the database to determine the maximum number of IOPS and MB per second.

You can save the following code in a script file like in the following example:

touch calibrate_io.sql

#paste th efollowing code into the newly created calibrate_io.sql file 

    lat  INTEGER;
    iops INTEGER;
    mbps INTEGER;
-- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (physical disks, max latency, iops, mbps, lat);
    DBMS_RESOURCE_MANAGER.CALIBRATE_IO (1, 10, iops, mbps, lat);
    DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);
    DBMS_OUTPUT.PUT_LINE ('latency  = ' || lat);
    dbms_output.put_line('max_mbps = ' || mbps);

SYSTEM@orcl> @calibrate_io.sql

max_iops = 12063
latency  = 0
max_mbps = 779

PL/SQL procedure successfully completed.


Main purpose of using CALIBRATE_IO is to just get quick feeling of your database storage capabilities.


Major advantage of CALIBRATE_IO lies in its simplicity and applicability as it works with classical file systems as well as with ASM.


However you need to be aware of its limitations as well like:

  • you should avoid peak hours and choose to execute CALIBRATE_IO when database load is minimal
  • max IOPS, max MBPS and max latency are not always correct
  • performs single-block random reads with asynchronous I/O calls buffered in the process heap instead to use db file sequential reads (synchronous I/O buffered in SGA)


Besides CALIBRATE_IO, here is the list to my older articles where you can find some other useful tools to perform benchmarks:


Get notified when a new post is published!



There are no comments yet. Why not start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.