脚本:使用AWR快照原始数据评估存储性能
全网最全面的Oracle AWR 专栏,持续更新中…
对于DBA来说,了解存储性能非常重要,这能帮助你更准确地判断数据库的整体表现。然而,在许多企业环境中,DBA往往没有操作系统层面的访问权限,无法使用iostat或sar等工具。幸运的是,Oracle的AWR快照原始数据中保存了历史I/O性能指标,可以用来间接评估存储性能。
其中一个非常有用的指标是DBA_HIST_SYSMETRIC_HISTORY视图中的Average Synchronous Single-Block Read Latency。
为什么选择这个指标?
因为它通常反映的是直接访问存储设备的物理读操作,往往绕过操作系统缓存。因此,它能更真实地反映I/O层面的存储性能,而不是被操作系统缓存机制所掩盖的延迟。
下面是我写的一个SQL,它计算在过去30天内(AAS > 10的繁忙时段)该指标的平均值和方差,用于评估存储的速度和稳定性:
-- Yuan Yao Nov 2025
SELECT AVG(h.value) AS average_latency,VARIANCE(h.value) AS variance_latency
FROM DBA_HIST_SYSMETRIC_HISTORY h
JOIN DBA_HIST_SNAPSHOT s ON h.snap_id = s.snap_id
JOIN DBA_HIST_SYSMETRIC_HISTORY b ON h.snap_id = b.snap_id
WHERE h.metric_name = 'Average Synchronous Single-Block Read Latency'AND s.begin_interval_time >= SYSDATE - 30AND b.metric_name = 'Average Active Sessions'AND b.value > 10AND h.value != 0;
The metric unit is milliseconds.
单位是毫秒(ms)。
- 平均值越低,表示读速度越快;
- 方差越小,表示性能越稳定。
结合两者,你可以在没有操作系统监控权限的情况下,通过AWR快照数据了解存储在真实工作负载下的表现。
下面是来自一台物理服务器的示例输出:
AVERAGE_LATENCY VARIANCE_LATENCY
-------------------- --------------------------------------------
0.7546538627422566 0.9798021232402001050268728028903789285714
下面是来自一台虚拟机的示例输出:
AVERAGE_LATENCY VARIANCE_LATENCY
--------------- ----------------
44.1579326 6088.10981
从结果可以清楚看到,虚拟化环境相比物理服务器在读延迟和稳定性上都有明显差异。
号主在certview.oracle.com网站上的证书清单截图。

关于号主,姚远:
- Oracle ACE(Oracle和MySQL数据库方向)
- 华为云最有价值专家
- 《MySQL 8.0运维与优化》的作者
- 拥有数十项数据库认证
- 曾任IBM公司数据库部门经理
- 20+年DBA经验,服务2万+客户
- 精通C和Java,发明两项计算机专利
- 两次获得国家部级奖
