--ERP准生产
sqlplus / as sysdba
set timing on;
set serveroutput on;
DECLARE
lat INTEGER;
iops INTEGER;
mbps INTEGER;
BEGIN
-- DBMS_RESOURCE_MANAGER.CALIBRATE_IO (disk_count,max_latency , iops, mbps, lat);
DBMS_RESOURCE_MANAGER.CALIBRATE_IO (5, 10, iops, mbps, lat);
DBMS_OUTPUT.PUT_LINE ('max_iops = ' || iops);
DBMS_OUTPUT.PUT_LINE ('latency = ' || lat);
dbms_output.put_line('max_mbps = ' || mbps);
end;
/
max_iops = 251622
latency = 0
max_mbps = 3399
PL/SQL procedure successfully completed.
Elapsed: 00:12:31.87
SQL> Tue Apr 15 14:48:11 CST 2025
关于Oracle数据库中的 max_iops、latency 和 max_mbps 参数,结合功能定义及性能调优场景,整理核心要点如下:
一、参数定义及作用
- max_iops
- 表示存储系统支持的最大每秒I/O操作数(Input/Output Operations Per Second),是Oracle通过
DBMS_RESOURCE_MANAGER.CALIBRATE_IO
存储过程测试得出的结果。 - 在CDB/PDB架构中,可通过
MAX_IOPS
参数限制每个PDB的I/O操作速率(需Oracle 12c及以上版本)。
- 表示存储系统支持的最大每秒I/O操作数(Input/Output Operations Per Second),是Oracle通过
- latency
- max_latency:用户设定的最大可容忍I/O延迟(单位:毫秒),作为校准测试的输入参数。OLTP系统通常建议设置≤20ms46。
- actual_latency:测试结束后实际测得的平均I/O延迟,由
CALIBRATE_IO
输出。
- max_mbps
- 表示存储系统的最大吞吐量(单位:MB/s),同样由
CALIBRATE_IO
计算得出。该值与存储带宽及I/O请求大小相关。 - 类似
MAX_IOPS
,可通过MAX_MBPS
参数限制PDB的I/O吞吐量。
- 表示存储系统的最大吞吐量(单位:MB/s),同样由
二、性能测试方法
通过 DBMS_RESOURCE_MANAGER.CALIBRATE_IO
存储过程进行I/O校准,步骤如下:
SET SERVEROUTPUT ON
DECLARE
lat INTEGER;
iops INTEGER;
mbps INTEGER;
BEGIN
DBMS_RESOURCE_MANAGER.CALIBRATE_IO (
num_physical_disks => 10, -- 物理磁盘近似数量
max_latency => 20, -- 最大容忍延迟(ms)
max_iops => iops,
max_mbps => mbps,
actual_latency => lat
);
DBMS_OUTPUT.PUT_LINE('Max IOPS = ' || iops);
DBMS_OUTPUT.PUT_LINE('Max MBPS = ' || mbps);
DBMS_OUTPUT.PUT_LINE('Actual Latency = ' || lat || ' ms');
END;
/
- 启用异步I/O
检查并设置filesystemio_options
参数为ASYNCH
或SETALL
,需重启数据库生效。sqlCopy CodeALTER SYSTEM SET filesystemio_options=SETALL SCOPE=SPFILE;
- 执行校准测试
num_physical_disks
:存储物理磁盘数(影响测试准确性)。max_latency
:测试终止条件,若未达到该延迟则继续加压。
三、配置建议
SELECT NAME, ASYNCH_IO FROM V$DATAFILE F, V$IOSTAT_FILE I
WHERE F.FILE#=I.FILE_NO AND FILETYPE_NAME='Data File';
- PDB资源限制
- 在CDB级别设置
MAX_IOPS
和MAX_MBPS
会影响所有PDB;若需差异化控制,可在PDB级别单独设置(优先级高于CDB)37。 - 示例:
ALTER SYSTEM SET MAX_IOPS=1000 SCOPE=BOTH;
- 在CDB级别设置
- 测试环境要求
- 确保数据库空闲或低负载时执行校准,避免干扰。
- 验证数据文件异步I/O状态:
- 输出
ASYNCH_IO
应为ASYNC_ON
。
四、注意事项
- 参数继承性:CDB root与PDB的
MAX_IOPS/MAX_MBPS
冲突时,PDB设置优先生效。 - Exadata限制:
MAX_IOPS/MAX_MBPS
不适用于Exadata存储。 - 默认值影响:若未显式设置限制参数(默认值为0),I/O资源不受约束。