
好的,我们来详细解析 Oracle 19C 数据库中一个极为重要的动态性能视图:V$SYSMETRIC。这个视图是数据库实时性能监控和诊断的基石。
📈 Oracle 19C V$SYSMETRIC 动态性能视图详解
1 视图概述与核心作用
V$SYSMETRIC 视图用于提供系统级性能指标的瞬时值。这些指标反映了数据库在最近一个极短时间窗口内(通常是60秒或15秒)的健康状况和性能表现。它与存储历史指标的 DBA_HIST_* 视图不同,V$SYSMETRIC 专注于“现在正在发生什么”,是进行实时故障诊断和性能分析的第一响应视图。
其核心作用是让DBA能够:
- 实时捕捉性能问题:快速识别当前的系统瓶颈,如极高的每秒逻辑读、物理读、等待事件等。
- 监控系统负载:了解数据库当前的活跃程度和资源消耗情况。
- 为容量规划提供实时数据点:观察系统在峰值压力下的表现。
2 字段详解
下表详细描述了 V$SYSMETRIC 视图中的每个字段。请注意:此视图在不同版本中字段可能略有增减,但核心字段保持不变。
| 字段名称 (Field Name) | 数据类型 | 描述 |
|---|---|---|
| BEGIN_TIME | DATE | 指标收集时间窗口的开始时间。 |
| END_TIME | DATE | 指标收集时间窗口的结束时间。与 BEGIN_TIME 一起定义了此指标值所度量的时间区间。 |
| INTSIZE_CSEC | NUMBER | 时间间隔大小,以百分之一秒(Centi-second)为单位。最常见的值是6000,代表60秒。 |
| GROUP_ID | NUMBER | 指标分组ID。用于区分不同类别的指标(如系统、事件、服务等),但与 V$SYSMETRIC_HISTORY 中的 GROUP_ID 含义不同,在此视图中通常为固定值。 |
| METRIC_NAME | VARCHAR2(64) | 性能指标的名称(例如:"CPU Usage Per Sec", "Physical Reads Per Sec")。这是查询时最关键的字段。 |
| METRIC_UNIT | VARCHAR2(64) | 指标值的单位(例如:"CentiSeconds Per Second", "Requests Per Second", "Blocks Per Second")。理解单位对解读数值至关重要。 |
| VALUE | NUMBER | 在该时间间隔内收集到的指标值。这是最核心的数值字段。 |
| METRIC_ID | NUMBER | 指标的唯一数字标识符,与 METRIC_NAME 对应。 |
| CON_ID | NUMBER | 容器ID(Container ID)。在多租户环境(CDB)中,标识该指标数据来源于哪个PDB。值为0通常表示属于CDB$ROOT。 |
关键字段解读:
INTSIZE_CSEC:6000 代表 60 秒,这是标准的“每分钟”指标。你可能会看到 1500,这代表 15 秒 的高频率采样间隔,用于获取更实时的数据。GROUP_ID:在V$SYSMETRIC中,此字段的语义与V$SYSMETRIC_HISTORY不同。在这里,它更像是一个“类别”标识符,而非历史组ID。VALUE和METRIC_UNIT:必须结合来看。例如,"CPU Usage Per Sec"的单位是"CentiSeconds Per Second"(每秒百分之一秒),这意味着一个VALUE为 50 表示每秒使用了 0.5 秒的CPU时间,即 一个CPU核心的50%利用率。如果有多个CPU核心,该值可以超过100。
3 底层原理与相关对象
3.1 底层原理
- 内存驻留:
V$SYSMETRIC是一个动态性能视图,其数据直接来源于数据库系统全局区(SGA)中的内存结构。当数据库实例运行时,后台进程(特别是MMON(Manageability Monitor Process)及其从属进程)会持续不断地收集各种性能统计数据。 - 高频采样与聚合:这些进程以极高的频率(例如每秒)采样各种系统活动。然后,MMON 进程会将这些细粒度的采样数据聚合到两个时间间隔桶中:60秒和15秒。
V$SYSMETRIC视图展示的就是最近一个完整的60秒或15秒间隔内的聚合值。 - 数据流转:
V$SYSMETRIC中的数据是最新、最实时的。每隔一个间隔(60秒),MMON 进程会执行一次快照(Snapshot),将V$SYSMETRIC和V$SYSMETRIC_HISTORY中的当前数据刷入到自动工作负载仓库(AWR)的底层表中(如WRH$_SYSMETRIC_SUMMARY),从而形成历史记录,供后期性能分析使用。 - 基表:像所有
V$视图一样,V$SYSMETRIC是基于一系列神秘的X$表(如X$SYSMETRIC)构建的。这些X$表是Oracle在内存中维护的虚拟表,其结构和内容对用户不透明且可能随版本变化,DBA 不应也不需直接查询它们。
3.2 相关视图
V$SYSMETRIC_HISTORY:存储V$SYSMETRIC中指标的历史记录(通常保留最近1小时左右的数据)。它包含多行数据,每行代表一个过去的时间间隔,可以用来观察短期内的指标变化趋势。它的字段与V$SYSMETRIC几乎相同。V$METRICNAME:提供所有可用指标的元数据信息,包括METRIC_ID,METRIC_NAME,METRIC_UNIT,GROUP_ID等。常用于与V$SYSMETRIC进行关联查询,以获取更清晰的描述。V$METRIC:V$SYSMETRIC的旧版本视图,在较新的版本中已被V$SYSMETRIC取代,不建议使用。- `DBA_HIST_SYSMETRIC_SUMMARY``:AWR历史快照中的系统指标摘要。这是进行长期性能趋势分析(如几天、几周、几个月)的主要数据来源。
DBA_HIST_SYSMETRIC_HISTORY:AWR快照中捕获的、更详细的系统指标历史记录。
4 主要使用场景
- 实时性能诊断:当用户报告“数据库现在很慢”时,DBA首先查询此视图,查看当前的
CPU Usage、I/O Requests、Average Active Sessions等关键指标,迅速定位瓶颈。 - 监控即时负载:在批处理作业运行、系统备份或已知的高峰期,通过此视图监控数据库的资源消耗情况,确保系统在可接受的范围内运行。
- 编制自定义监控脚本:许多企业级的监控工具(如Zabbix, Prometheus等)会通过SQL查询此视图,以获取数据库的实时性能数据。
- 验证配置变更效果:在调整了数据库参数或SQL语句后,立即观察相关指标的变化,确认变更是否产生了积极影响。
5 常用SQL查询示例
5.1 查看当前所有关键系统指标(60秒间隔)
此查询获取最新的60秒间隔内的所有指标,并按值降序排列,快速找出负载最高的项。
SELECT METRIC_NAME,
METRIC_UNIT,
ROUND(VALUE, 2) AS VALUE,
BEGIN_TIME,
END_TIME
FROM V$SYSMETRIC
WHERE INTSIZE_CSEC = 6000 -- 确保是60秒间隔
ORDER BY VALUE DESC;
5.2 查询特定的关键性能指标
此查询专注于数据库最核心的几个实时指标。
SELECT METRIC_NAME,
METRIC_UNIT,
ROUND(VALUE, 2) AS VALUE
FROM V$SYSMETRIC
WHERE METRIC_NAME IN (
'CPU Usage Per Sec', -- CPU使用率
'Physical Reads Per Sec', -- 物理读
'Logical Reads Per Sec', -- 逻辑读
'DB Block Changes Per Sec', -- 数据块变化
'Redo Generated Per Sec', -- Redo生成量
'User Commits Per Sec', -- 用户提交
'User Transaction Per Sec', -- 用户事务
'Current Logons Count' -- 当前登录数
)
AND INTSIZE_CSEC = 6000
ORDER BY METRIC_NAME;
5.3 将指标与描述信息关联查询
通过关联 V$METRICNAME 视图,可以获取更完整的指标信息。
SELECT m.METRIC_NAME,
m.METRIC_UNIT,
ROUND(s.VALUE, 2) AS VALUE,
m.METRIC_DESC -- 指标的详细描述
FROM V$SYSMETRIC s
JOIN V$METRICNAME m ON s.METRIC_ID = m.METRIC_ID
WHERE s.INTSIZE_CSEC = 6000
AND m.METRIC_NAME LIKE '%CPU%' -- 查询所有CPU相关的指标
ORDER BY s.VALUE DESC;
5.4 获取系统当前等待事件排名(非常有用)
这个查询利用了系统指标中关于等待事件的部分,可以直接看出当前系统在等什么。
SELECT METRIC_NAME,
ROUND(VALUE, 2) AS "Waits Per Sec"
FROM V$SYSMETRIC
WHERE METRIC_NAME LIKE '%Wait Time%'
OR METRIC_NAME LIKE '%Waits%')
AND VALUE > 0
AND INTSIZE_CSEC = 6000
ORDER BY VALUE DESC;
6 重要知识点与原理延伸
- AWR的基石:
V$SYSMETRIC和V$SYSMETRIC_HISTORY是AWR快照数据的直接来源。MMON进程每隔60分钟(默认)会将内存中的这些 metric 历史数据刷新到磁盘上的AWR表(如WRH$_SYSMETRIC_SUMMARY)中,成为永久的历史性能数据。 - 指标类型:指标分为多种类型:
- 速率型(Rate):如
Per Second,表示每秒的速率。 - 累积型(Cumulative):如
Total Wait Time,表示自实例启动以来的总时间。 - 即时型(Instantaneous):如
Current Logons Count,表示某个时间点的瞬时值。
V$SYSMETRIC主要包含速率型和即时型指标。
- 速率型(Rate):如
- 多租户支持:在CDB环境中,查询时可以通过
CON_ID字段来过滤特定PDB的性能数据,或者连接到目标PDB中直接查询该PDB的V$SYSMETRIC视图。 - 与等待事件视图的关系:
V$SYSMETRIC中的等待事件指标(如"User I/O Wait Time")是V$SYSTEM_EVENT视图的速率化版本。V$SYSTEM_EVENT显示的是自实例启动以来的累积等待时间,而V$SYSMETRIC告诉你最近一分钟内每秒发生了多少等待,这对于实时诊断更具意义。
掌握 V$SYSMETRIC 视图的使用,是每一位Oracle DBA进行高效、精准性能监控和故障排查的必备技能。它提供了数据库系统脉搏的实时读数。
欢迎关注我的公众号《IT小Chen》
5247

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



