跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Oracle如何定位高负载存储?通过AWR分析I/O延迟

AWR报告中I/O延迟需重点关注db file sequential/scattered read及log file sync的Avg Wait (ms),超阈值(如SSD>3ms、SAN>10ms)且Time Waited占比>15%即存瓶颈;单文件延迟须查dba_hist_filestatxs并换算readtim/writetim;log file sync高延迟未必是存储问题,应比对log file parallel write;AWR聚合易掩盖瞬时毛刺,可用v$iostat_file实时定位热点文件。 怎么看AWR报告里的I/O延迟指标 oracle 的awr报告本身不直接标出“高负载存储”,但
db time
和
wait events
里藏着线索。重点盯紧
db file sequential read
、
db file scattered read
、
log file sync
这三类等待,它们的平均等待时间(
avg wait (ms)
)超过10 ms就该警惕——尤其当
time waited
占比超过总db time的15%时,基本可判定i/o子系统已成瓶颈。 注意:不同存储类型有不同基线:
SSD
上
sequential read
超3 ms就算异常,而传统
SAN
可能容忍到8–12 ms。别拿同一阈值套所有环境。 如何从AWR提取单个数据文件的I/O延迟 AWR默认只汇总到表空间或文件类型,要定位具体物理文件,得查
dba_hist_filestatxs
视图。关键字段是
phyrds
(物理读)、
phywrts
(物理写)、
readtim
和
writetim
,用它们算出单次I/O耗时:
SELECT f.file_name, ROUND((f.readtim / NULLIF(f.phyrds, 0)), 2) AS avg_read_ms, ROUND((f.writetim / NULLIF(f.phywrts, 0)), 2) AS avg_write_ms FROM dba_hist_filestatxs f JOIN dba_hist_snapshot s ON f.snap_id = s.snap_id WHERE s.begin_interval_time BETWEEN SYSDATE-7 AND SYSDATE AND f.phyrds > 0 ORDER BY avg_read_ms DESC;
常见陷阱:
readtim
单位是百分之一秒(centiseconds),不是毫秒;漏掉
NULLIF
会导致除零错误;未加时间范围过滤会查全库历史,性能极差。 为什么
log file sync
延迟高不一定是存储问题
log file sync
等待时间飙升,第一反应常是归档日志写慢,但真正根因可能是: 应用频繁提交(
COMMIT
太密),而非磁盘慢 LGWR写入的是
redo log
文件,若这些文件放在高延迟LUN上,确实会拖慢;但更常见的是
LGWR
被
log file parallel write
卡住——后者才反映底层I/O能力 启用了
SYNC
模式的
standby
,主库需等备库确认,此时延迟反映的是网络+备库I/O,非本地存储 验证方法:对比
log file sync
与
log file parallel write
的
Avg Wait (ms)
。如果前者远高于后者,问题大概率在应用或Data Guard配置,而非存储本身。 oracle知识库 oracle知识库下载 下载 AWR里没看到明显I/O等待?试试
v$iostat_file
实时抓取 AWR采样间隔通常30–60分钟,突发I/O毛刺可能被平滑掉。这时要切到实时视角:
v$iostat_file
每秒刷新,能立刻暴露瞬时热点文件:
SELECT filetype_name, file_name, small_read_reqs, small_read_reqs - NVL(LAG(small_read_reqs) OVER (ORDER BY file_name), 0) AS delta_reads FROM v$iostat_file WHERE filetype_name IN ('DATA FILE', 'LOG FILE') ORDER BY delta_reads DESC;
注意:
v$iostat_file.file_name
在RAC中只显示本地实例看到的路径,跨节点不一致;另外该视图统计不含ASM别名,若用ASM,得关联
v$asm_alias
才能对应到业务表空间。 真实场景里,很多“存储慢”最后发现是某个索引维护导致单个
.dbf
文件持续被小块随机读打满——这种细节AWR聚合后根本看不出来。

相关文章