
好的,我们来全面、深入地解析 Oracle 19C 数据库中的 V$THRESHOLD_TYPES 动态性能视图。这个视图是 Oracle 主动式智能管理框架的基石,它定义了数据库可以监控哪些指标以及如何对其设置告警。
1. 作用与使用场景
作用:
V$THRESHOLD_TYPES 动态性能视图用于显示数据库中所有可被监控的指标(Metrics)及其对应的阈值(Threshold)类型定义。它本身并不存储具体的阈值设置,而是提供了一个“菜单”,列出了所有支持设置告警的指标及其属性(例如,阈值是基于观测值还是百分比,是否支持严重和警告两级告警等)。
核心使用场景:
- 规划性能监控:在配置数据库告警前,查询此视图以了解哪些指标是可监控的,以及这些指标支持何种类型的阈值(绝对值、百分比、最大容量等)。
- 自动化管理:这是 Oracle 自动工作负载仓库(AWR)和服务器生成告警(Server-Generated Alerts)功能的基础。DBMS_SERVER_ALERTS 包和 Enterprise Manager 依赖于此视图中的信息。
- 故障排除:当收到一个服务器告警时,可以查询此视图来了解该告警所基于的指标的具体含义和阈值计算方式。
- 自定义监控:开发自定义监控脚本或集成第三方监控工具时,此视图提供了所需的元数据,以确保与 Oracle 的监控框架保持一致。
2. 字段含义详解
下表列出了 V$THRESHOLD_TYPES 视图中的关键字段及其详细含义。
| 字段名称 | 数据类型 | 含义与说明 |
|---|---|---|
METRICS_ID | NUMBER | 指标的唯一数字标识符。是系统内部使用的键值。 |
METRICS_NAME | VARCHAR2(64) | 指标的名称。这是最直观的标识,如 "CPU Time Per Sec", "Database Time Per Sec", "Physical Reads Per Sec"。 |
WARNING_OPERATOR | VARCHAR2(6) | 警告级别阈值的比较运算符。定义了如何将指标的实际值与警告阈值进行比较以触发告警。常见值: • GT: Greater Than,大于 • LT: Less Than,小于 |
WARNING_VALUE | VARCHAR2(60) | 警告级别阈值的值。这是一个字符串,其含义取决于 WARNING_IS_NUMBER 和 IS_PERCENTAGE 字段。例如,它可以是 '1000'、'85' 或 'NONE'(表示未设置)。 |
CRITICAL_OPERATOR | VARCHAR2(6) | 严重级别阈值的比较运算符。定义了如何将指标的实际值与严重阈值进行比较以触发告警。取值同 WARNING_OPERATOR。 |
CRITICAL_VALUE | VARCHAR2(60) | 严重级别阈值的值。含义同 WARNING_VALUE,但级别更高。 |
CONSECUTIVE_OCCURRENCES | NUMBER | 触发告警前,阈值必须被连续超过的次数。用于避免因瞬时峰值产生不必要的告警噪点。默认通常是 1。 |
OBSERVATION_PERIOD | NUMBER | 观测周期(单位:秒)。指标值是在这个时间窗口内计算的平均值。例如,CPU Time Per Sec 的观测周期就是 1 秒。 |
INSTANCE_ID | NUMBER | 实例标识符。在 RAC 环境中,指示该阈值定义是针对特定实例(值 > 0)还是所有实例(值为 0)。 |
IS_PERCENTAGE | VARCHAR2(5) | 指示阈值值是否为百分比。 • TRUE: WARNING_VALUE 和 CRITICAL_VALUE 是百分比(如 85%)。• FALSE: 阈值是指标的绝对单位值(如 1000 次物理读/秒)。 |
WARNING_IS_NUMBER | VARCHAR2(5) | 指示警告阈值是否是一个数字(而非字符串关键字)。 • TRUE: WARNING_VALUE 可被转换为数字。• FALSE: WARNING_VALUE 是一个特殊关键字(如 'NONE')。 |
CRITICAL_IS_NUMBER | VARCHAR2(5) | 指示严重阈值是否是一个数字(而非字符串关键字)。含义同 WARNING_IS_NUMBER。 |
COMPARISON_OPERATOR | VARCHAR2(30) | 比较操作符的描述性名称(如 "Greater than")。是 WARNING_OPERATOR/CRITICAL_OPERATOR 的可读版本。 |
CON_ID | NUMBER | 容器 ID。在多租户环境(CDB)中,标识该阈值类型属于哪个可插拔数据库(PDB)。对于在 CDB 级别定义的指标,此值为 0。 |
3. 相关视图与基表
-
相关视图:
DBA_THRESHOLDS: 这是最重要的相关视图。V$THRESHOLD_TYPES定义了“可以设置什么”,而DBA_THRESHOLDS显示了“当前已经设置了什么”(即具体的阈值配置)。V$SYSMETRIC/V$SYSMETRIC_HISTORY: 显示当前和历史的系统指标值。这些就是可以被设置阈值的指标的实际值。V$METRICNAME: 提供指标ID到指标名称的映射,与V$THRESHOLD_TYPES信息类似但角度不同。DBA_OUTSTANDING_ALERTS/DBA_ALERT_HISTORY: 显示当前活跃的和历史的告警信息。这些告警正是由基于V$THRESHOLD_TYPES定义的阈值所触发的。
-
基表:
V$THRESHOLD_TYPES是一个动态性能视图,其数据来源于数据库的内部字典信息。它很可能基于一个名为X$DBMS_SERVER_ALERT_INFO(或类似名称)的 X$ 表,该表在数据库启动时被加载到内存中,定义了服务器告警功能的元数据框架。绝对不建议用户直接查询 X$ 表。
4. 底层原理与知识点介绍
1. Oracle 的主动式监控框架:
Oracle 不仅仅被动地提供性能数据(通过 V$ 视图),还内置了一个主动监控和告警系统。这个系统的核心流程是:
- 指标收集:MMON 等后台进程定期从 SGA 中收集性能指标数据。
- 阈值定义:
V$THRESHOLD_TYPES定义了哪些指标可被监控及其阈值类型。 - 阈值设置:用户(或默认配置)通过
DBMS_SERVER_ALERTS.SET_THRESHOLD过程或在 EM 中操作,将具体阈值值写入DBA_THRESHOLDS。 - 阈值评估:MMON 进程将收集到的指标值与
DBA_THRESHOLDS中的设置进行对比。 - 告警触发:如果指标值在定义的观测周期内连续超过阈值,MMON 会生成一条告警,写入
DBA_OUTSTANDING_ALERTS,并可通过 EM、通知方法或查询视图被发现。
2. 阈值类型(Threshold Types)的含义:
- 绝对值阈值:当
IS_PERCENTAGE='FALSE'时,阈值是指标的绝对单位。例如,设置"Physical Reads Per Sec" > 1000。 - 百分比阈值:当
IS_PERCENTAGE='TRUE'时,阈值是一个百分比。这通常用于“已使用容量”类指标。例如,设置"Tablespace Space Used" > 85%。百分比的计算基础(如表空间总大小)由 Oracle 内部定义。 - 两级阈值:大多数指标支持警告(Warning) 和严重(Critical) 两级阈值,为不同紧迫程度的问题提供分层告警。
3. 关键特性:
- 动态性:阈值可以在数据库运行期间动态修改,无需重启。
- 持久化:阈值设置存储在数据字典中,在数据库重启后依然有效。
- 基于指标:与传统基于事件的告警(如 ORA-错误)不同,这是基于持续的性能度量,更能反映系统健康度趋势。
5. 常用查询 SQL
1. 查看所有可设置告警的指标及其属性(核心查询)
SELECT METRICS_NAME,
COMPARISON_OPERATOR,
WARNING_VALUE,
CRITICAL_VALUE,
IS_PERCENTAGE,
OBSERVATION_PERIOD,
CONSECUTIVE_OCCURRENCES
FROM V$THRESHOLD_TYPES
WHERE INSTANCE_ID = 0 -- 通常查询适用于所有实例的定义
ORDER BY METRICS_NAME;
2. 查找支持百分比阈值的指标(常用于空间管理)
SELECT METRICS_NAME, WARNING_VALUE, CRITICAL_VALUE
FROM V$THRESHOLD_TYPES
WHERE IS_PERCENTAGE = 'TRUE'
ORDER BY METRICS_NAME;
3. 查找与 I/O 相关的可监控指标
SELECT METRICS_NAME, WARNING_OPERATOR, WARNING_VALUE, CRITICAL_VALUE
FROM V$THRESHOLD_TYPES
WHERE METRICS_NAME LIKE '%I/O%' OR METRICS_NAME LIKE '%Read%' OR METRICS_NAME LIKE '%Write%'
ORDER BY METRICS_NAME;
4. 结合 DBA_THRESHOLDS,查看已设置的阈值
这个查询将“可设置的”与“已设置的”关联起来。
SELECT
t.METRICS_NAME,
d.WARNING_OPERATOR,
d.WARNING_VALUE,
d.CRITICAL_OPERATOR,
d.CRITICAL_VALUE,
d.CONSECUTIVE_OCCURRENCES
FROM V$THRESHOLD_TYPES t
JOIN DBA_THRESHOLDS d ON t.METRICS_ID = d.METRICS_ID
ORDER BY t.METRICS_NAME;
总结:
V$THRESHOLD_TYPES 视图是 Oracle 由被动管理转向主动管理的关键元数据视图。它不像其他动态性能视图那样直接显示运行状态,而是定义了数据库自我监控的能力范围。
- 对于 DBA,它是规划和实施监控策略的“字典”。
- 对于 Oracle 自身,它是自动化管理功能(AWR、Advisory Framework、Server Alerts)的规则库。
掌握这个视图,意味着你理解了 Oracle 如何思考性能问题:将性能状况量化为指标,并为这些指标定义合理的健康边界,从而实现预测性和预防性的数据库管理。
欢迎关注我的公众号《IT小Chen》
2306

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



