外观
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
- 登录 Enterprise Manager
- 导航到监控页面:
- 点击 "性能" 选项卡
- 点击 "监控配置"
- 配置指标阈值:
- 选择指标类别
- 设置警告阈值和严重阈值
- 配置通知方式
- 配置监控周期:
- 设置收集频率
- 设置保留时间
- 配置汇总级别
- 配置通知规则:
- 设置通知条件
- 配置通知收件人
- 设置通知方式(邮件、短信等)
使用自定义脚本
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 分钟 |
| 物理读次数/秒 | 1000 | 2000 | 1 分钟 |
| I/O 等待时间 | 20ms | 50ms | 1 分钟 |
| 硬解析率 | 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: 确定监控指标的方法:
- 基于业务需求:根据业务对数据库的要求确定关键指标
- 基于数据库特性:根据数据库类型、版本和配置确定相关指标
- 基于最佳实践:参考 Oracle 推荐的监控指标
- 基于历史问题:根据历史问题经验调整监控指标
- 逐步完善:通过实践逐步完善监控指标体系
Q2: 如何设置合理的告警阈值?
A2: 设置合理告警阈值的方法:
- 建立基准:收集正常运行时的指标值作为基准
- 分析趋势:分析指标的历史趋势
- 考虑业务影响:根据业务对性能的容忍度设置阈值
- 逐步调整:通过观察和分析逐步调整阈值
- 差异化设置:根据不同环境(生产、测试)设置不同阈值
Q3: 如何处理监控数据的存储和管理?
A3: 处理监控数据存储和管理的方法:
- 分层存储:
- 短期数据:存储在内存和本地存储
- 中期数据:存储在数据库中
- 长期数据:存储在外部存储或数据仓库
- 数据清理:
- 定期清理过期数据
- 设置数据保留策略
- 自动归档旧数据
- 数据压缩:对历史数据进行压缩存储
- 数据聚合:对长期数据进行聚合,减少存储量
Q4: 如何与企业现有的监控系统集成?
A4: 与企业现有监控系统集成的方法:
- 使用标准协议:
- SNMP:配置 SNMP 陷阱
- REST API:通过 API 交换数据
- JMX:使用 JMX 接口
- 使用集成工具:
- Zabbix:使用 Oracle 监控插件
- Nagios:使用 check_oracle_health 插件
- Prometheus:使用 Oracle exporters
- 自定义集成:
- 开发自定义适配器
- 使用消息队列传递监控数据
- 配置数据同步机制
Q5: 如何实现监控的自动化和智能化?
A5: 实现监控自动化和智能化的方法:
- 自动数据收集:配置自动数据收集任务
- 自动分析:使用机器学习算法分析监控数据
- 自动告警:设置智能告警规则,减少误报
- 自动修复:对常见问题实现自动修复
- 预测性分析:基于历史数据预测未来问题
- 根因分析:自动分析问题的根本原因
- 自适应监控:根据数据库状态自动调整监控策略
