
对于DBA来说,了解存储性能非常重要,这能帮助你更准确地判断数据库的整体表现。然而,在许多企业环境中,DBA往往没有操作系统层面的访问权限,无法使用iostat或sar等工具。幸运的是,Oracle的AWR快照原始数据中保存了历史I/O性能指标,可以用来间接评估存储性能。
其中一个非常有用的指标是DBA_HIST_SYSMETRIC_HISTORY视图中的Average Synchronous Single-Block Read Latency。
为什么选择这个指标?
因为它通常反映的是直接访问存储设备的物理读操作,往往绕过操作系统缓存。因此,它能更真实地反映I/O层面的存储性能,而不是被操作系统缓存机制所掩盖的延迟。
下面是我写的一个SQL,它计算在过去30天内(AAS > 5的繁忙时段)该指标的平均值和方差,用于评估存储的速度和稳定性:
-- Yuan Yao Nov 2025
SELECT ROUND(AVG(h.value), 4) AS average_latency,
ROUND(VARIANCE(h.value), 4) 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 - 30
AND b.metric_name = 'Average Active Sessions'
AND b.value > 5
AND h.value != 0;单位是毫秒(ms)。
结合两者,你可以在没有操作系统监控权限的情况下,通过AWR快照数据了解存储在真实工作负载下的表现。
下面是来自一台物理服务器的示例输出:
AVERAGE_LATENCY VARIANCE_LATENCY
__________________ ___________________
0.6684 0.857下面是来自一台虚拟机的示例输出:
AVERAGE_LATENCY VARIANCE_LATENCY
--------------- ----------------
52.206 6805.532从结果可以清楚看到,虚拟化环境相比物理服务器在读延迟和稳定性上都有明显差异。