Skip to content

Oracle 监控指标配置

监控指标分类

性能指标

  • CPU 相关指标:CPU 使用率、CPU 等待时间、CPU 密集型 SQL
  • 内存相关指标:SGA 使用率、PGA 使用率、共享池使用率、缓冲区缓存命中率
  • I/O 相关指标:物理读/写次数、I/O 等待时间、I/O 吞吐量、数据文件 I/O 分布
  • SQL 相关指标:SQL 执行次数、SQL 响应时间、硬解析率、绑定变量使用率
  • 等待事件指标:等待事件分布、Top 等待事件、等待时间趋势

空间指标

  • 表空间指标:表空间使用率、表空间增长率、表空间剩余空间
  • 数据文件指标:数据文件大小、数据文件增长率、数据文件 I/O 性能
  • 临时表空间指标:临时表空间使用率、临时段分配情况
  • 撤销表空间指标:撤销表空间使用率、撤销段过期情况、Ora-01555 错误率
  • 归档日志指标:归档日志生成率、归档日志空间使用率、归档日志传输状态

安全指标

  • 用户相关指标:用户登录失败次数、异常登录行为、权限变更
  • 审计相关指标:审计日志生成率、审计事件分布、安全事件数量
  • 加密相关指标:加密会话比例、加密性能影响
  • 网络相关指标:网络连接数、连接超时率、网络传输加密状态

可用性指标

  • 实例指标:实例启动/关闭次数、实例故障次数、实例恢复时间
  • Data Guard 指标:Redo 传输延迟、Redo 应用延迟、角色转换次数
  • RAC 指标:节点状态、集群互连性能、资源重分配次数
  • 服务可用性:服务响应时间、服务可用性百分比、服务故障次数

监控指标配置方法

使用 Oracle Enterprise Manager

  1. 登录 Enterprise Manager
  2. 导航到监控页面
    • 点击 "性能" 选项卡
    • 点击 "监控配置"
  3. 配置指标阈值
    • 选择指标类别
    • 设置警告阈值和严重阈值
    • 配置通知方式
  4. 配置监控周期
    • 设置收集频率
    • 设置保留时间
    • 配置汇总级别
  5. 配置通知规则
    • 设置通知条件
    • 配置通知收件人
    • 设置通知方式(邮件、短信等)

使用自定义脚本

sql
-- 监控 CPU 使用率
SELECT
  TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS time,
  ROUND(VALUE/100, 2) AS cpu_usage
FROM
  v$sysmetric
WHERE
  metric_name = 'CPU Usage Per Sec'
  AND group_id = 2;

-- 监控表空间使用率
SELECT
  tablespace_name,
  ROUND((used_space * 8) / 1024, 2) AS used_mb,
  ROUND((total_space * 8) / 1024, 2) AS total_mb,
  ROUND((used_space / total_space) * 100, 2) AS usage_percent
FROM
  dba_tablespace_usage_metrics
ORDER BY
  usage_percent DESC;

-- 监控等待事件
SELECT
  event,
  total_waits,
  round(time_waited/100, 2) AS time_waited_sec,
  round(average_wait/100, 4) AS average_wait_sec
FROM
  v$system_event
WHERE
  event NOT LIKE 'SQL*Net%'
  AND event NOT LIKE 'rdbms%message%'
ORDER BY
  time_waited DESC
FETCH FIRST 10 ROWS ONLY;

-- 监控 Top SQL
SELECT
  sql_id,
  plan_hash_value,
  executions,
  round(elapsed_time/1000000, 2) AS elapsed_sec,
  round(cpu_time/1000000, 2) AS cpu_sec,
  round(buffer_gets/executions, 2) AS buffer_gets_per_exec,
  sql_text
FROM
  v$sql
WHERE
  executions > 0
ORDER BY
  elapsed_time DESC
FETCH FIRST 10 ROWS ONLY;

使用 AWR 报告

sql
-- 生成 AWR 报告
@?/rdbms/admin/awrrpt.sql

-- 分析 AWR 报告中的关键指标
-- 1. DB Time 和 DB CPU
-- 2. Top 5 等待事件
-- 3. 实例效率百分比
-- 4. 内存统计信息
-- 5. I/O 统计信息
-- 6. Top SQL 语句

-- 使用 AWR 比较报告分析指标变化
@?/rdbms/admin/awrddrpt.sql

使用 ASH 报告

sql
-- 生成 ASH 报告
@?/rdbms/admin/ashrpt.sql

-- 分析 ASH 报告中的关键指标
-- 1. Top 等待事件
-- 2. Top SQL 语句
-- 3. Top 会话
-- 4. Top 阻塞者
-- 5. 等待事件分布

监控指标阈值配置

性能指标阈值

指标名称警告阈值严重阈值监控频率
CPU 使用率70%90%1 分钟
缓冲区缓存命中率90%85%5 分钟
共享池使用率80%90%5 分钟
物理读次数/秒100020001 分钟
I/O 等待时间20ms50ms1 分钟
硬解析率10%20%5 分钟
等待事件时间占比40%60%5 分钟

空间指标阈值

指标名称警告阈值严重阈值监控频率
表空间使用率80%90%1 小时
临时表空间使用率70%85%30 分钟
撤销表空间使用率70%85%30 分钟
归档日志空间使用率70%85%15 分钟
数据文件增长率5%/天10%/天1 天

安全指标阈值

指标名称警告阈值严重阈值监控频率
登录失败次数5 次/小时10 次/小时15 分钟
权限变更次数3 次/天10 次/天1 天
审计事件数量1000 次/小时5000 次/小时1 小时
异常登录行为1 次/天5 次/天1 天

可用性指标阈值

指标名称警告阈值严重阈值监控频率
Data Guard 传输延迟300 秒600 秒1 分钟
Data Guard 应用延迟300 秒600 秒1 分钟
RAC 节点状态1 个节点不可用2 个节点不可用30 秒
服务响应时间5 秒10 秒30 秒
实例恢复时间60 秒120 秒1 分钟

监控数据收集与存储

数据收集方法

  • V$ 视图:实时性能数据,存储在内存中
  • DBA_ 视图:字典信息,存储在数据字典中
  • AWR 快照:每小时自动收集,存储在 SYSAUX 表空间
  • ASH 数据:每秒采样,存储在内存中,保留 1 小时
  • 审计日志:安全相关事件,存储在审计表或文件中

数据存储策略

  • 短期数据:保留在内存和数据库中,用于实时监控
  • 中期数据:存储在 AWR 中,默认保留 8 天
  • 长期数据:导出到外部存储,用于趋势分析
  • 归档策略:定期归档监控数据,确保存储空间充足

数据清理策略

  • AWR 数据

    sql
    -- 修改 AWR 保留时间
    EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 7*24*60);
    
    -- 手动删除旧 AWR 数据
    EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id => 1, high_snap_id => 1000);
  • 审计数据

    sql
    -- 清理审计表
    EXEC DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, use_last_arch_timestamp => TRUE);

监控告警配置

告警级别

  • 信息:正常操作信息,无需干预
  • 警告:潜在问题,需要关注
  • 严重:严重问题,需要立即干预
  • 紧急:紧急问题,需要立即采取行动

告警通知方式

  • 邮件通知:发送邮件给相关人员
  • 短信通知:发送短信给相关人员
  • 系统集成:与监控系统集成(如 Zabbix、Nagios)
  • 企业微信/钉钉:发送消息到企业聊天工具
  • 自动响应:触发自动修复脚本

告警规则配置

  • 基于阈值:当指标超过设定阈值时触发
  • 基于趋势:当指标变化趋势异常时触发
  • 基于模式:当指标出现特定模式时触发
  • 基于关联:当多个指标同时异常时触发

告警抑制

  • 重复告警抑制:避免同一问题重复告警
  • 维护窗口抑制:在维护期间抑制告警
  • 依赖告警抑制:避免级联告警
  • 告警聚合:将相关告警聚合为一个

监控系统集成

与 Enterprise Manager 集成

  • 配置 Enterprise Manager Cloud Control:集中管理多个数据库
  • 设置服务级别目标 (SLO):定义服务质量目标
  • 配置自动修复:对常见问题自动执行修复操作
  • 生成自定义报告:根据需要生成监控报告

与第三方监控工具集成

  • Zabbix 集成

    • 使用 Zabbix Agent 监控 Oracle
    • 配置自定义监控项
    • 设置触发器和告警
  • Nagios 集成

    • 使用 Nagios 插件监控 Oracle
    • 配置服务检查
    • 设置联系人组和通知
  • Prometheus 集成

    • 使用 Oracle exporters 导出指标
    • 配置 PromQL 查询
    • 使用 Grafana 可视化监控数据

与企业监控系统集成

  • 配置 SNMP 陷阱:将 Oracle 告警发送到企业 SNMP 系统
  • 集成 REST API:通过 REST API 交换监控数据
  • 使用统一监控平台:将 Oracle 监控纳入企业统一监控平台

监控最佳实践

1. 建立监控体系

  • 分层监控:建立实例级、数据库级、应用级的分层监控体系
  • 全方位监控:覆盖性能、空间、安全、可用性等各个方面
  • 重点突出:对关键指标进行重点监控
  • 动态调整:根据业务需求和数据库状态动态调整监控策略

2. 配置合理阈值

  • 基于基准:建立数据库性能基准,据此设置阈值
  • 根据业务:根据业务特点和需求设置合适的阈值
  • 逐步调整:通过观察和分析逐步调整阈值
  • 文档化:记录阈值设置的依据和调整历史

3. 自动化监控

  • 自动收集:配置自动数据收集
  • 自动分析:使用工具自动分析监控数据
  • 自动告警:配置自动告警机制
  • 自动修复:对常见问题实现自动修复

4. 定期审查与优化

  • 定期审查监控配置:每季度审查一次监控配置
  • 分析监控数据:定期分析监控数据,识别趋势和模式
  • 优化监控策略:根据分析结果优化监控策略
  • 更新监控指标:根据数据库变化和业务需求更新监控指标

5. 应急响应准备

  • 制定应急响应流程:针对常见告警制定响应流程
  • 准备应急工具:准备常用的诊断和修复工具
  • 演练应急响应:定期演练应急响应流程
  • 更新应急计划:根据实际情况更新应急计划

常见监控问题与解决方案

监控数据过多

症状

  • 监控系统产生大量数据
  • 存储压力大
  • 分析困难

解决方案

  • 优化监控频率:减少非关键指标的监控频率
  • 数据聚合:对监控数据进行聚合存储
  • 数据清理:定期清理过期监控数据
  • 指标筛选:只监控必要的关键指标

误报过多

症状

  • 大量虚假告警
  • 告警疲劳
  • 重要告警被忽略

解决方案

  • 调整阈值:根据实际情况调整告警阈值
  • 告警抑制:配置告警抑制规则
  • 告警聚合:将相关告警聚合
  • 维护窗口:在维护期间抑制告警

监控盲区

症状

  • 某些问题未被监控覆盖
  • 问题发生后才发现
  • 监控不全面

解决方案

  • 全面评估:定期评估监控覆盖范围
  • 新增指标:根据需要新增监控指标
  • 监控审计:定期审计监控配置
  • 经验总结:根据历史问题调整监控策略

监控系统性能问题

症状

  • 监控系统响应慢
  • 数据收集延迟
  • 影响数据库性能

解决方案

  • 优化监控频率:减少对数据库性能影响大的监控
  • 分离部署:将监控系统与数据库分离部署
  • 资源限制:限制监控系统资源使用
  • 异步处理:使用异步方式处理监控数据

常见问题(FAQ)

Q1: 如何确定需要监控哪些指标?

A1: 确定监控指标的方法:

  1. 基于业务需求:根据业务对数据库的要求确定关键指标
  2. 基于数据库特性:根据数据库类型、版本和配置确定相关指标
  3. 基于最佳实践:参考 Oracle 推荐的监控指标
  4. 基于历史问题:根据历史问题经验调整监控指标
  5. 逐步完善:通过实践逐步完善监控指标体系

Q2: 如何设置合理的告警阈值?

A2: 设置合理告警阈值的方法:

  1. 建立基准:收集正常运行时的指标值作为基准
  2. 分析趋势:分析指标的历史趋势
  3. 考虑业务影响:根据业务对性能的容忍度设置阈值
  4. 逐步调整:通过观察和分析逐步调整阈值
  5. 差异化设置:根据不同环境(生产、测试)设置不同阈值

Q3: 如何处理监控数据的存储和管理?

A3: 处理监控数据存储和管理的方法:

  1. 分层存储
    • 短期数据:存储在内存和本地存储
    • 中期数据:存储在数据库中
    • 长期数据:存储在外部存储或数据仓库
  2. 数据清理
    • 定期清理过期数据
    • 设置数据保留策略
    • 自动归档旧数据
  3. 数据压缩:对历史数据进行压缩存储
  4. 数据聚合:对长期数据进行聚合,减少存储量

Q4: 如何与企业现有的监控系统集成?

A4: 与企业现有监控系统集成的方法:

  1. 使用标准协议
    • SNMP:配置 SNMP 陷阱
    • REST API:通过 API 交换数据
    • JMX:使用 JMX 接口
  2. 使用集成工具
    • Zabbix:使用 Oracle 监控插件
    • Nagios:使用 check_oracle_health 插件
    • Prometheus:使用 Oracle exporters
  3. 自定义集成
    • 开发自定义适配器
    • 使用消息队列传递监控数据
    • 配置数据同步机制

Q5: 如何实现监控的自动化和智能化?

A5: 实现监控自动化和智能化的方法:

  1. 自动数据收集:配置自动数据收集任务
  2. 自动分析:使用机器学习算法分析监控数据
  3. 自动告警:设置智能告警规则,减少误报
  4. 自动修复:对常见问题实现自动修复
  5. 预测性分析:基于历史数据预测未来问题
  6. 根因分析:自动分析问题的根本原因
  7. 自适应监控:根据数据库状态自动调整监控策略