“系统上线前,DBA 最怕听到的一句话是什么?” “磁盘 I/O 扛不住了!”
为了避免这种尴尬,Oracle 早在 11g 就内置了 I/O 校准 工具,不需要第三方压测软件,一条 PL/SQL 就能把磁盘的最大 IOPS、吞吐量(MB/s)以及延迟(ms)测得明明白白。
前置条件
- 版本要求:Oracle 11g R2 及以上。
- 权限要求:需要
SYSDBA
或SYSASM
角色。 - 业务窗口:测试会跑大量随机/顺序 I/O,建议业务低谷或测试环境执行。
- 磁盘数量:如果你用的是 ASM,确保所有磁盘都在线;单实例文件系统也没问题,Oracle 会按“可见磁盘”计算。
脚本
-- 1. 登录
sqlplus / as sysdba
-- 2. 执行
SET TIMING ON
SET SERVEROUTPUT ON
DECLARE
l_iops NUMBER;
l_mbps NUMBER;
l_lat NUMBER;
BEGIN
DBMS_RESOURCE_MANAGER.CALIBRATE_IO(
disk_count => &输入磁盘数,
max_latency => &最大可接受延迟_ms,
max_iops => l_iops,
max_mbps => l_mbps,
actual_latency => l_lat);
DBMS_OUTPUT.PUT_LINE('IOPS = ' || l_iops);
DBMS_OUTPUT.PUT_LINE('MB/s = ' || l_mbps);
DBMS_OUTPUT.PUT_LINE('LAT(ms)= ' || l_lat);
END;
/
-- 3. 查询历史
SELECT * FROM DBA_RSRC_IO_CALIBRATE ORDER BY START_TIME DESC FETCH FIRST 1 ROW ONLY;