
理解您想深入了解 Oracle 19C 中 V$SERVICEMETRIC_HISTORY 动态性能视图。由于搜索结果中的相关信息较少,我会结合自己的知识来为您提供详细的解答,包括其作用、核心字段、底层原理及使用实践,并确保表格清晰易懂。
V$SERVICEMETRIC_HISTORY 视图主要用于记录和查询数据库服务(Service)相关的历史性能指标和度量值。这些指标反映了服务在过去时间点的运行状态和性能表现,是监控服务级别性能历史趋势、诊断过去的性能问题以及进行容量规划的重要依据。
🗄️ Oracle 19C V$SERVICEMETRIC_HISTORY 动态性能视图详解
📊 1. 视图概述与核心作用
V$SERVICEMETRIC_HISTORY 是 Oracle 数据库中一个重要的动态性能视图,它提供了与数据库服务(Service)相关的历史性能指标和度量值。这些指标反映了服务在过去时间点的运行状态和性能表现,是监控服务级别性能历史趋势、诊断过去的性能问题以及进行容量规划的重要依据。
该视图的核心作用在于:
- 历史性能分析:提供数据库服务的历史性能指标,帮助DBA了解服务的长期健康度和负载变化趋势。
- 问题诊断与回溯:当发生性能问题后,可以通过此视图回溯历史数据,分析问题发生时的服务状态。
- 容量规划与趋势预测:通过分析服务的长期指标趋势,为未来的资源扩容和优化提供数据支持。
- 多租户环境监控:在CDB环境中,监控不同PDB服务的性能历史。
🔍 2. 使用场景与应用价值
- 服务性能历史回顾与分析:对比当前与历史性能数据,判断服务状态变化趋势。
- 事后性能问题诊断:当用户报告某时间段服务缓慢时,查询该视图分析当时性能指标。
- 资源使用趋势分析:分析服务的CPU、响应时间等指标随时间的变化趋势,预测未来资源需求。
- 服务级别协议(SLA)合规性验证:通过历史数据验证服务是否满足SLA要求的性能指标。
- 多租户环境下的资源审计:在CDB环境中,审计不同PDB服务的资源使用历史。
🗂️ 3. 字段详解与数据类型
以下是 V$SERVICEMETRIC_HISTORY 视图的主要字段及其详细说明:
| 字段名 (Column Name) | 数据类型 (Datatype) | 描述 (Description) |
|---|---|---|
| BEGIN_TIME | DATE | 指标收集周期的开始时间。 |
| END_TIME | DATE | 指标收集周期的结束时间。 |
| SERVICE_NAME | VARCHAR2(64) | 数据库服务的名称。 |
| SERVICE_NAME_HASH | NUMBER | 服务名称的哈希值。 |
| INST_ID | NUMBER | 在RAC环境中,生成这些指标的实例标识符。 |
| GROUP_ID | NUMBER | 度量分组ID。与 V$METRICGROUP 视图关联。 |
| GOODNESS | NUMBER | 一个抽象化的“服务质量”评分。数值越高表示该实例上的服务性能越好,负载越轻。 |
| DELTA | NUMBER | 该指标在采样周期内的变化量(适用于某些计数器类型的指标)。 |
| FLAGS | NUMBER | 内部标志位。 |
| CPU_PER_CALL | NUMBER | 每次调用平均消耗的CPU时间(单位:百分之一秒)。 |
| ELAPSEDTIME_PER_CALL | NUMBER | 每次调用平均消耗的总时间(包括等待时间,单位:百分之一秒)。 |
| DBTIME_PER_CALL | NUMBER | 每次调用平均消耗的数据库时间(DB Time)。 |
| CALLS_PER_SECOND | NUMBER | 每秒的调用次数。 |
| DBTIME_PER_SECOND | NUMBER | 每秒消耗的数据库时间(DB Time)。 |
| CPU_TIME_PER_SECOND | NUMBER | 每秒消耗的CPU时间。 |
| CON_ID | NUMBER | 多租户环境中,该指标所属容器的ID。 |
🔗 4. 相关视图与基表
相关动态性能视图
- V$SERVICEMETRIC:提供当前的服务指标数据,数据存储在内存中,更实时但易失。
- GV$SERVICEMETRIC_HISTORY:RAC环境的全局视图,显示所有实例上的服务指标历史数据。
- V$METRICNAME:存储度量指标的名称和元数据。
- V$METRICGROUP:定义了度量分组(如长 duration、短 duration),
GROUP_ID与此视图关联。 - V$SERVICES:显示数据库中当前定义的所有服务的基本信息。
- V$ACTIVE_SERVICES:显示当前活动的服务。
数据字典视图
- DBA_SERVICES:提供数据库中所有服务的配置信息。
基表信息
动态性能视图的数据通常来源于内存结构(X表),由Oracle内核和后台进程(如MMON)维护。‘V表),由Oracle内核和后台进程(如MMON)维护。`V表),由Oracle内核和后台进程(如MMON)维护。‘VSERVICEMETRIC_HISTORY的数据可能源自AWR基础设施,其底层可能与WRMSERVICEMETRICHISTORY‘等内部表相关联,但∗∗强烈不建议直接查询X_SERVICE_METRIC_HISTORY` 等内部表相关联,但**强烈不建议直接查询XSERVICEMETRICHISTORY‘等内部表相关联,但∗∗强烈不建议直接查询X表或AWR基表**。
⚙️ 5. 底层原理与工作机制
- 数据收集与快照:Oracle的MMON (Manageability Monitor) 进程定期(默认每小时)收集性能快照,其中包含服务的详细度量数据。这些数据最初存储在内存中(可通过
V$SERVICEMETRIC查看)。 - 数据持久化:MMON进程会定期将内存中的性能数据(包括服务度量数据)刷新到磁盘上的自动工作负载仓库(AWR)中。 这使得历史数据得以持久保存。
- 历史数据访问:
V$SERVICEMETRIC_HISTORY视图提供了访问这些持久化历史服务度量数据的接口。 - 数据保留策略:历史服务度量数据的保留时间由AWR的快照保留策略决定(默认保留8天)。超过保留期的数据可能会被自动清除。
- 多租户支持:在CDB环境中,AWR会按
CON_ID分离不同容器的数据,确保每个PDB的性能历史得到独立存储和监控。
📊 6. 常用查询SQL示例
6.1 查看特定服务的核心性能指标历史
此查询可查看某服务在过去一段时间内的性能历史。
SELECT begin_time,
end_time,
goodness,
cpu_per_call,
elapsedtime_per_call,
calls_per_second,
cpu_time_per_second
FROM v$servicemetric_history
WHERE service_name = 'YOUR_SERVICE_NAME' -- 替换为你的服务名
AND begin_time > SYSDATE - INTERVAL '1' DAY -- 查询最近1天数据
ORDER BY begin_time DESC;
6.2 分析服务的历史负载均衡情况(RAC环境)
此查询用于分析RAC环境中,某服务在各个实例上的历史负载分布。
SELECT inst_id,
TO_CHAR(begin_time, 'YYYY-MM-DD HH24:MI') as time_range,
goodness,
calls_per_second
FROM v$servicemetric_history
WHERE service_name = 'YOUR_SERVICE_NAME' -- 替换为你的服务名
AND begin_time > SYSDATE - INTERVAL '6' HOUR -- 查询最近6小时数据
ORDER BY begin_time DESC, inst_id;
6.3 诊断历史性能问题
当收到用户关于某时段服务缓慢的报告后,可用此查询回溯分析。
SELECT TO_CHAR(begin_time, 'MM-DD HH24:MI') as time,
service_name,
elapsedtime_per_call as avg_resp_time,
cpu_per_call,
(elapsedtime_per_call - cpu_per_call) AS avg_wait_time_per_call,
calls_per_second,
goodness
FROM v$servicemetric_history
WHERE begin_time BETWEEN TO_DATE('2023-10-26 14:00', 'YYYY-MM-DD HH24:MI')
AND TO_DATE('2023-10-26 15:30', 'YYYY-MM-DD HH24:MI')
ORDER BY begin_time, service_name;
6.4 对比不同服务的性能历史趋势
此查询可用于比较多个服务的性能历史。
SELECT begin_time,
service_name,
elapsedtime_per_call,
calls_per_second
FROM v$servicemetric_history
WHERE service_name IN ('SERVICE_A', 'SERVICE_B', 'SERVICE_C')
AND begin_time > SYSDATE - INTERVAL '7' DAY -- 最近一周数据
ORDER BY begin_time, service_name;
6.5 查询多租户环境中PDB服务的性能历史
此查询适用于CDB环境,查看特定PDB内服务的性能历史。
SELECT h.begin_time,
h.service_name,
c.name AS pdb_name,
h.elapsedtime_per_call,
h.calls_per_second
FROM v$servicemetric_history h
JOIN v$containers c ON h.con_id = c.con_id
WHERE c.name = 'YOUR_PDB_NAME' -- 替换为你的PDB名
AND h.begin_time > SYSDATE - INTERVAL '1' DAY
ORDER BY h.begin_time DESC;
💡 7. 重要注意事项
- 数据保留期限:
V$SERVICEMETRIC_HISTORY中的数据受AWR快照保留策略限制(默认8天)。如需更长期的历史分析,需查询DBA_HIST_*数据仓库视图(如DBA_HIST_SERVICE_METRIC,如果存在)。 - 性能开销:虽然查询历史视图本身开销相对较小,但频繁复杂的查询仍需注意其对系统的影响。
- 数据精度:历史数据是快照时刻的聚合值,其精度和粒度由AWR设置决定。
- 权限要求:查询这些视图通常需要
SELECT ANY DICTIONARY权限或特定的角色授权(如SELECT_CATALOG_ROLE)。
🏁 8. 总结
V$SERVICEMETRIC_HISTORY 视图是 Oracle 数据库服务级别性能管理(SLM)的重要组成部分,它通过持久化AWR中的服务度量数据,为DBA提供了一个强大的工具,用于:
- 回溯分析:诊断过去发生的服务性能问题。
- 趋势洞察:识别服务性能的长期模式和趋势。
- 容量规划:基于历史数据做出科学的资源预测和规划决策。
- SLA合规性验证:用数据证明服务是否达到了承诺的质量标准。
掌握 V$SERVICEMETRIC_HISTORY 与 V$SERVICEMETRIC(当前数据)、DBA_HIST_*(长期历史)视图的配合使用,能够帮助您构建一个从实时监控到历史回溯的完整服务性能管理闭环,尤其在复杂的RAC和多租户环境中价值凸显。
希望以上详细的解释能帮助您更好地理解和使用 V$SERVICEMETRIC_HISTORY 视图。
欢迎关注我的公众号《IT小Chen》

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



