
Oracle 19C 中的 V$SYSMETRIC_SUMMARY 视图非常重要,它提供了系统性能指标的统计摘要,帮助你快速了解数据库在一段时间内的整体性能表现和波动情况。我会为你详细解释这个视图。
📊 1. 视图概述与核心作用
V$SYSMETRIC_SUMMARY 视图存储了系统性能指标在多个采样周期内的统计摘要信息。它不像 V$SYSMETRIC 或 V$SYSMETRIC_HISTORY 那样记录每个时间点的瞬时值,而是对这些历史数据进行聚合计算,包括最大值、最小值、平均值和标准方差等。这些摘要数据主要来源于 V$SYSMETRIC_HISTORY。
它的核心作用是让你能快速评估数据库在特定时间段内的性能特征、稳定性和资源使用情况,而无需查询大量的历史细节数据。
🏛️ 2. 底层原理与数据流转
V$SYSMETRIC_SUMMARY 的数据来源于对 V$SYSMETRIC_HISTORY 的聚合计算。其底层数据流和持久化过程如下图所示:
关键点说明:
- 内存驻留:
V$SYSMETRIC_SUMMARY和其他的V$视图一样,是动态性能视图,其数据主要存储在系统全局区(SGA)的内存结构中。这意味着在实例关闭后,这些数据会丢失。 - AWR持久化:为了使这些性能摘要成为长期的历史数据,Oracle 的 MMON(Manageability Monitor)进程会定期(默认每小时一次)执行一次 AWR 快照。快照过程中,
V$SYSMETRIC_SUMMARY中的摘要数据会被持久化到 AWR 的基表(底层表,如WRH$_SYSMETRIC_SUMMARY)中。之后,DBA 可以通过DBA_HIST_SYSMETRIC_SUMMARY视图查询这些持久化的历史摘要数据。 - 基表:
V$SYSMETRIC_SUMMARY基于一些内部的X$表(如X$SYSMETRIC_SUMMARY),这些表由Oracle在内存中维护,结构不公开,通常不建议直接查询。
📋 3. 字段详解
V$SYSMETRIC_SUMMARY 包含的字段及其含义、数据类型如下表所示:
| 字段名称 (Field Name) | 数据类型 | 描述 |
|---|---|---|
| BEGIN_TIME | DATE | 统计摘要所覆盖时间段的开始时间。 |
| END_TIME | DATE | 统计摘要所覆盖时间段的结束时间。 |
| INTSIZE_CSEC | NUMBER | 采样时间间隔的长度,以百分之一秒(Centi-second)为单位。例如,6000 代表 60 秒。 |
| GROUP_ID | NUMBER | 指标分组的标识符ID。用于区分不同类别的指标。 |
| METRIC_ID | NUMBER | 性能指标的唯一数字ID。与 V$METRICNAME 视图中的 METRIC_ID 关联。 |
| METRIC_NAME | VARCHAR2(64) | 性能指标的名称(例如:"CPU Usage Per Sec", "Physical Reads Per Sec")。 |
| NUM_INTERVAL | NUMBER | 计算此统计摘要所依据的采样间隔数量。例如,若基于过去10个60秒间隔计算,则此值为10。 |
| MAXVAL | NUMBER | 该指标在统计时间段内的最大值。 |
| MINVAL | NUMBER | 该指标在统计时间段内的最小值。 |
| AVERAGE | NUMBER | 该指标在统计时间段内的平均值。 |
| STANDARD_DEVIATION | NUMBER | 该指标在统计时间段内的标准方差。衡量指标的波动程度;值越大,说明该指标值波动越剧烈;值越小,说明指标值越稳定。 |
| METRIC_UNIT | VARCHAR2(64) | 性能指标值的单位(例如:"CentiSeconds Per Second", "Requests Per Second")。 |
| CON_ID | NUMBER | 容器ID(Container ID)。在多租户环境(CDB)中,标识该指标数据来源于哪个可插拔数据库(PDB)。值为 0 通常表示属于 CDB$ROOT(根容器)。 |
关键字段解读:
NUM_INTERVAL,MAXVAL,MINVAL,AVERAGE,STANDARD_DEVIATION:这些统计字段是摘要信息的核心,帮你快速了解指标的整体表现和稳定性,无需自己计算。STANDARD_DEVIATION(标准方差):此字段特别重要,它量化了指标的波动性。标准方差越大,表示该指标值波动越剧烈(例如,CPU使用率忽高忽低);标准方差越小,表示指标值越稳定。CON_ID:在多租户环境中至关重要。通过此字段可以筛选或识别性能指标来自哪个PDB。
🔗 4. 相关视图
| 视图名称 | 描述 |
|---|---|
V$SYSMETRIC | 显示最新一个时间间隔的系统指标值。 |
V$SYSMETRIC_HISTORY | 显示近期的历史系统指标值(通常保留约1小时)。 |
V$METRICNAME | 存储所有可用指标的元数据(如名称、单位),用于关联查询以获得更清晰的描述。 |
DBA_HIST_SYSMETRIC_SUMMARY | AWR快照中保存的 V$SYSMETRIC_SUMMARY 的长期历史数据,用于数天、数周或数月级别的性能趋势分析。 |
DBA_HIST_SNAPSHOT | 记录AWR快照的元信息(快照ID、时间等),常与 DBA_HIST_SYSMETRIC_SUMMARY 关联查询。 |
⚙️ 5. 主要使用场景
V$SYSMETRIC_SUMMARY 视图主要用于:
- 快速性能评估:快速获取过去一段时间(如最近一小时)内关键性能指标(如CPU、IO、等待事件)的整体水平、峰值和波动情况,判断系统是否总体健康。
- 稳定性分析:通过标准方差(STANDARD_DEVIATION) 等字段,分析性能指标的稳定程度。方差过大可能预示着间歇性性能问题或资源争用。
- 容量规划与资源调整:根据指标的平均值和最大值,了解系统资源(如CPU、内存、I/O)的平均负载和峰值压力,为容量规划和资源调整提供依据。
- AWR报告补充:AWR报告中的许多摘要数据其实就来源于此视图或其历史版本
DBA_HIST_SYSMETRIC_SUMMARY。
📊 6. 常用SQL查询示例
查询1:查看近期关键性能指标的统计摘要
此查询获取最近统计周期内关键指标的聚合信息,按平均CPU使用率降序排列。
SELECT METRIC_NAME,
METRIC_UNIT,
NUM_INTERVAL,
ROUND(MINVAL, 2) AS MIN_VALUE,
ROUND(MAXVAL, 2) AS MAX_VALUE,
ROUND(AVERAGE, 2) AS AVG_VALUE,
ROUND(STANDARD_DEVIATION, 2) AS STD_DEV,
BEGIN_TIME,
END_TIME
FROM V$SYSMETRIC_SUMMARY
WHERE METRIC_NAME IN (
'CPU Usage Per Sec',
'Physical Reads Per Sec',
'Logical Reads Per Sec',
'Redo Generated Per Sec',
'User Commits Per Sec',
'Average Active Sessions'
)
AND CON_ID = 0 -- 查询CDB$ROOT中的数据,如需PDB数据则替换CON_ID
ORDER BY AVERAGE DESC;
查询2:关注指标波动性(标准方差)
此查询重点关注那些平均值较高且波动性(标准方差)较大的指标,这些可能是潜在的性能瓶颈点。
SELECT METRIC_NAME,
ROUND(AVERAGE, 2) AS AVG_VALUE,
ROUND(STANDARD_DEVIATION, 2) AS STD_DEV,
ROUND(STANDARD_DEVIATION / NULLIF(AVERAGE, 0), 2) AS COEFFICIENT_OF_VARIATION -- 变异系数,另一种波动性衡量
FROM V$SYSMETRIC_SUMMARY
WHERE AVERAGE > 0
AND STANDARD_DEVIATION > 0
AND CON_ID = 0
ORDER BY COEFFICIENT_OF_VARIATION DESC;
查询3:与历史快照关联查询(需AWR)
此查询将摘要信息与AWR快照关联,获取更具体时间范围的性能摘要。
SELECT S.BEGIN_INTERVAL_TIME,
S.END_INTERVAL_TIME,
M.METRIC_NAME,
M.AVERAGE,
M.MAXVAL,
M.MINVAL,
M.STANDARD_DEVIATION
FROM DBA_HIST_SYSMETRIC_SUMMARY M
JOIN DBA_HIST_SNAPSHOT S ON M.SNAP_ID = S.SNAP_ID AND M.DBID = S.DBID AND M.INSTANCE_NUMBER = S.INSTANCE_NUMBER
WHERE M.METRIC_NAME = 'CPU Usage Per Sec'
AND S.BEGIN_INTERVAL_TIME > SYSDATE - 1 -- 查询最近1天内的数据
AND M.CON_ID = 0
ORDER BY S.SNAP_ID DESC;
💎 7. 重要知识点总结
- 摘要 vs. 详细数据:
V$SYSMETRIC_SUMMARY提供统计摘要(最大值、最小值、平均值、标准方差等),而V$SYSMETRIC_HISTORY提供时间序列上的详细值。摘要用于快速了解整体情况,详细数据用于分析具体时间点的变化。 - 内存与持久化:
V$SYSMETRIC_SUMMARY本身数据位于内存(SGA),但其结果可通过AWR快照持久化到DBA_HIST_SYSMETRIC_SUMMARY中。 - 多租户感知:在CDB环境中,始终注意
CON_ID字段,以确保你查看的是正确容器(Root或特定PDB)的数据。 - 标准方差的意义:标准方差(STANDARD_DEVIATION) 是一个非常有价值的字段,它直接反映了性能指标的稳定性。高方差可能意味着不稳定的性能,值得深入调查。
- AWR的基石:
V$SYSMETRIC_SUMMARY中的摘要数据是生成AWR性能报告的重要数据来源之一。
希望以上详细的解释能帮助你更好地理解和使用 V$SYSMETRIC_SUMMARY 视图。如果你有任何进一步的疑问,随时可以提出。
欢迎关注我的公众号《IT小Chen》
5247

被折叠的 条评论
为什么被折叠?



