AWR报告中无“IOPS匹配度”指标,需用physical reads/writes total I/O requests和bytes四值计算实际IOPS与MB/s,并据OLTP(≈250:1)或OLAP(≤50:1)比值判断IO合理性。

直接看 AWR 里的 Load Profile 和 Instance Activity Statistics
AWR 报告里没有“IOPS 匹配度”这个现成指标,但你可以通过 physical reads total I/O requests、physical writes total I/O requests、physical reads total bytes、physical writes total bytes 这四组累计值,自己算出实际 IOPS 和 MB/s,再结合业务类型判断是否匹配。关键不是数字本身,而是 IOPS 与吞吐量的比值是否合理。
- OLTP 类型系统:IOPS 高、单次 IO 小(通常 4KB–16KB),吞吐量相对低。典型比值是 IOPS : MB/s ≈ 250 : 1(比如 5000 IOPS ≈ 20 MB/s)
- OLAP 或大数据扫描类:IOPS 较低、单次 IO 大(64KB–1MB+),吞吐量高。比值可能低至 50 : 1 甚至更低(比如 2000 IOPS ≈ 100 MB/s)
- 若算出来是 10000 IOPS 但只有 10 MB/s → 单次 IO 平均才 1KB,远低于 Oracle 默认
db_block_size(通常是 8KB),说明大量小 IO,可能是索引争用或应用频繁单行访问,需查db file sequential read等待 - 若 IOPS 很低(如 200 MB/s)→ 单次 IO 平均 >400KB,大概率是全表扫描或并行查询压满带宽,得看执行计划和
physical reads direct
怎么从 AWR 报告里快速定位这四个关键指标
打开 HTML 格式 AWR 报告后,直接搜索以下位置:
-
Load Profile 表格中 “Per Second” 列下的:
Physical reads、Physical writes—— 这两个是每秒逻辑 IO 次数(含 direct path),可粗略当 IOPS 看,但不区分读写请求合并 -
Instance Activity Statistics 部分找:
physical reads total I/O requests和physical writes total I/O requests—— 这才是真实物理 IO 请求计数,求和即为总 IOPS - 同节中:
physical reads total bytes和physical writes total bytes—— 求和后除以报告时间(秒),就是 MB/s - 注意:这些值都是两个快照之间的 delta,不是瞬时速率;如果报告时间跨度太短(
为什么不能只看 OS 层 iostat 的 TPS 和 rkb/s?
因为数据库层的 IO 和 OS 层看到的磁盘 IO 不是一一对应的。Oracle 可能做 IO 合并(比如多个 8KB block 合成一次 64KB 写入)、缓存(buffer cache 命中就不出物理 IO)、Direct Path(绕过 buffer cache,但计入 AWR 的 physical reads direct)。
- AWR 的
physical reads total I/O requests是 Oracle 实际发给存储的 IO 次数,反映的是数据库视角的并发压力 - iostat 的
tps是块设备驱动收到的请求次数,受 IO 调度器合并、多路径、RAID 条带等影响,往往比 AWR 数值低 20%–50% - 如果 AWR 算出 IOPS=5000,而 iostat 显示某 LUN 的 tps 只有 3200,不要急着说“不匹配”——先确认是否用了 ASM、是否有多路径聚合、是否所有 LUN 都纳入统计
- 真正要对比的是:AWR 总 IOPS vs 所有数据盘 iostat tps 之和;AWR 总 MB/s vs 所有数据盘 rkb/s+wkb/s 之和
容易被忽略的三个细节
很多 DBA 算完数字就停了,但以下三点不验证,结论很可能跑偏:
-
db_block_size必须确认:AWR 中的 IO 字节数是按实际读写的字节数统计的,但如果数据库用了 16KB block(如某些 RAC 环境),而你按 8KB 估算单次 IO 大小,比值会翻倍误判 - 归档日志 IO 是否混入:
physical writes包含了 LGWR 写日志、DBWR 写数据、ARCn 写归档。如果归档频繁(尤其在非归档模式切换后首次归档),physical writes total I/O requests会被拉高,但这类 IO 对业务响应无直接影响 - 闪回/备份类操作干扰:RMAN 备份、Flashback Database、LogMiner 等会触发大量 direct path IO,在 Instance Activity Statistics 里体现为
physical reads direct/physical writes direct,它们计入吞吐量但不反映 OLTP 压力,需单独剥离
真正难的不是算数,是把 AWR 的 IO 统计还原成业务语义:这次高 IOPS 是因为订单提交激增,还是因为某个 SQL 突然开始扫全表?得结合 Top SQL 和等待事件交叉验证,否则数字只是幻影。


















