直接看Tablespace IO Stats的Avg Rd(ms)/Avg Wr(ms):SSD环境>3ms、SAN环境>10ms且Phy Reads/Writes超1000次即预警;但需结合DBA_HIST_FILESTATXS查单文件延迟(readtim/writetim×10得毫秒),并交叉验证direct path read/write与log file sync/parallel write差值。

直接看 Tablespace IO Stats 里的 Avg Rd(ms) 和 Avg Wr(ms)
AWR 报告末尾的 Tablespace IO Stats 是最易读、也最容易误读的区域。它不显示单个文件,只按表空间聚合,但 Avg Rd(ms) 和 Avg Wr(ms) 是判断存储响应是否滞后的第一道筛子。SSD 环境下 Avg Rd(ms) > 3 ms、SAN 环境下 > 10 ms 就该拉响警报——前提是该表空间的 Phy Reads 或 Phy Writes 量级合理(比如每秒几十次以上),否则毛刺干扰大。
常见错误是看到某个表空间 Avg Rd(ms) = 1.8 ms 就放心,却忽略它背后是 Phy Reads = 2 —— 这种低频读毫无诊断价值。真正要盯的是:Avg Rd(ms) > 基线 且 Phy Reads 在报告时段内超过 1000 次。
别信汇总值:必须查 DBA_HIST_FILESTATXS 算单文件延迟
Tablespace IO Stats 会把热点数据文件的高延迟平均掉。比如一个表空间含 10 个文件,其中 1 个 LOB 文件因 CHUNK 大小和 NOLOGGING 批量写入导致单次 readtim 高达 45 cs(即 450 ms),其余 9 个文件都
正确做法是用以下查询定位真实瓶颈文件:
SELECT d.file_name,
ROUND((f.readtim / NULLIF(f.phyrds, 0)) * 10, 2) AS avg_read_ms,
ROUND((f.writetim / NULLIF(f.phywrts, 0)) * 10, 2) AS avg_write_ms
FROM dba_hist_filestatxs f
JOIN dba_data_files d ON f.file# = d.file#
WHERE f.snap_id = &snap_id
AND f.phyrds > 0
ORDER BY avg_read_ms DESC
FETCH FIRST 5 ROWS ONLY;关键点:
-
readtim和writetim单位是百分之一秒(centiseconds),必须乘 10 才是毫秒;漏乘会把 450 ms 当成 45 ms - 必须用
NULLIF(f.phyrds, 0),否则phyrds = 0时触发ORA-01476 -
&snap_id必须显式传入,不能省略或用子查询替代,否则性能极差且结果不可比
对比 log file sync 和 log file parallel write 判断是否真为存储写瓶颈
log file sync 高延迟常被直接归因为“磁盘慢”,但这是最大误区。它的等待时间包含 LGWR 写日志 + 日志刷盘 + (若启用 Data Guard SYNC)等待备库确认三部分。
真正反映存储写能力的是 log file parallel write 的 Avg Wait (ms)。两者需同步比对:
- 若
log file syncAvg Wait = 18 ms,log file parallel write= 17.2 ms → 存储写入确实拖累,优先查 LGWR 所在 LUN 的 I/O 调度与队列深度 - 若前者 = 22 ms,后者 = 0.9 ms → 根本不是磁盘问题,而是应用 COMMIT 过密,或主库启用了 SYNC 模式但备库延迟高
- 两者差值稳定 > 5 ms,且
v$session_wait中等待log file sync的会话集中在少数事务上 → 应检查这些事务是否未批量提交、是否含大量小更新
注意 direct path read/write 对 IOStat 的干扰
LOB 或大表全表扫描走直接路径,不经过 Buffer Cache,其 I/O 不计入 Tablespace IO Stats 的 Phy Reads,而单独体现为 direct path read 等等待事件。此时 Tablespace IO Stats 的 Avg Rd(ms) 可能正常,但实际存储已在高压下运行。
验证方法:
- 在 Top 5 Timed Foreground Events 中,
direct path read或direct path write排名前三,且 Avg Wait(ms) > 15 ms - 对应 SQL 含
DBMS_LOB、READ、WRITE关键字,或执行计划中出现TABLE ACCESS FULLon LOBSEGMENT -
Load Profile中Physical Reads Direct显著上升,而Physical Reads变化不大
这种情况下,Tablespace IO Stats 已失效,必须结合 v$iostat_file 实时查物理文件 I/O 密度,或用 DBA_HIST_FILESTATXS 查对应文件的 phywrts 和 writetim。



















