Skip to content

Oracle 日常性能监控

监控指标体系

系统级指标

CPU 使用率

  • 监控对象:数据库服务器的 CPU 使用率
  • 监控阈值:持续超过 80% 时告警
  • 监控工具:OS 命令(top、vmstat)、Oracle Enterprise Manager
  • 分析方法:区分用户进程、系统进程和空闲进程的 CPU 使用情况
  • 优化建议:考虑增加 CPU 资源、优化 SQL 语句、调整并行度

内存使用率

  • 监控对象:服务器内存使用情况、SGA 和 PGA 大小
  • 监控阈值:物理内存使用率超过 90% 时告警
  • 监控工具:OS 命令(free、vmstat)、Oracle 视图(v$sgastat、v$pgastat)
  • 分析方法:检查内存分配是否合理,是否存在内存泄漏
  • 优化建议:调整 SGA 和 PGA 大小、增加物理内存、优化内存使用

磁盘 I/O

  • 监控对象:磁盘读写速度、I/O 等待时间、磁盘使用率
  • 监控阈值:I/O 等待时间超过 20ms 或磁盘使用率超过 85% 时告警
  • 监控工具:OS 命令(iostat、sar)、Oracle 视图(v$filestat、v$iostat_file)
  • 分析方法:识别热点磁盘和文件,分析 I/O 模式
  • 优化建议:使用 RAID 配置、增加存储带宽、优化 SQL 减少 I/O、使用分区表

网络性能

  • 监控对象:网络吞吐量、延迟、连接数
  • 监控阈值:网络延迟超过 50ms 或丢包率超过 1% 时告警
  • 监控工具:OS 命令(netstat、ping)、Oracle 视图(v$session_wait)
  • 分析方法:检查网络瓶颈和连接状态
  • 优化建议:优化网络配置、增加带宽、使用连接池、减少网络传输数据量

数据库级指标

实例状态

  • 监控对象:实例是否正常运行、启动时间、状态变化
  • 监控阈值:实例异常或状态变化时告警
  • 监控工具:Oracle 视图(v$instance、v$database)、Oracle Enterprise Manager
  • 分析方法:检查实例状态和数据库状态
  • 优化建议:及时处理实例异常,确保高可用性

连接数

  • 监控对象:当前连接数、最大连接数、连接趋势
  • 监控阈值:连接数超过最大连接数的 80% 时告警
  • 监控工具:Oracle 视图(v$session、v$process)、Oracle Enterprise Manager
  • 分析方法:识别连接来源和类型,检查是否有空闲连接
  • 优化建议:调整最大连接数、使用连接池、清理空闲连接、优化应用连接管理

SGA 性能

  • 监控对象:SGA 各组件使用情况、缓冲区命中率
  • 监控阈值:缓冲区命中率低于 90% 时告警
  • 监控工具:Oracle 视图(v$sgastat、v$buffer_pool_statistics)
  • 分析方法:检查 SGA 组件配置是否合理,是否有内存不足情况
  • 优化建议:调整 SGA 组件大小、使用自动内存管理

PGA 性能

  • 监控对象:PGA 使用情况、排序和哈希操作性能
  • 监控阈值:PGA 使用率超过 90% 或排序区溢出频繁时告警
  • 监控工具:Oracle 视图(v$pgastat、v$sysstat)
  • 分析方法:检查 PGA 配置是否合理,是否有大量排序或哈希操作
  • 优化建议:调整 PGA_AGGREGATE_TARGET 参数、优化 SQL 减少排序操作

SQL 性能指标

慢 SQL

  • 监控对象:执行时间长的 SQL 语句
  • 监控阈值:执行时间超过 5 秒的 SQL 语句
  • 监控工具:Oracle 视图(v$session_longops、v$sqlarea)、AWR 报告
  • 分析方法:分析执行计划,识别性能瓶颈
  • 优化建议:创建索引、重写 SQL、调整执行计划、使用绑定变量

SQL 执行计划

  • 监控对象:SQL 执行计划的变化
  • 监控阈值:执行计划发生变化时告警
  • 监控工具:Oracle 视图(v$sql_plan、dba_hist_sqlplan)、SQL Plan Management
  • 分析方法:检查执行计划是否最优,是否有计划退化
  • 优化建议:使用 SQL 计划基线、收集统计信息、调整索引

硬解析率

  • 监控对象:SQL 硬解析次数和比例
  • 监控阈值:硬解析率超过 10% 时告警
  • 监控工具:Oracle 视图(v$sysstat、v$sql)
  • 分析方法:检查是否使用绑定变量,是否有大量重复 SQL
  • 优化建议:使用绑定变量、调整 shared_pool_size、使用游标共享

存储指标

表空间使用率

  • 监控对象:各表空间的使用情况和增长趋势
  • 监控阈值:表空间使用率超过 85% 时告警
  • 监控工具:Oracle 视图(dba_tablespaces、dba_free_space)、Oracle Enterprise Manager
  • 分析方法:预测表空间增长趋势,识别快速增长的表空间
  • 优化建议:添加数据文件、扩展现有数据文件、清理无用数据、使用自动扩展

数据文件 I/O

  • 监控对象:数据文件的读写次数和大小
  • 监控阈值:单个数据文件 I/O 等待时间超过 20ms 时告警
  • 监控工具:Oracle 视图(v$filestat、v$iostat_file)
  • 分析方法:识别热点数据文件,分析 I/O 模式
  • 优化建议:将热点文件分散到不同磁盘、使用 ASM 进行负载均衡、优化 SQL 减少 I/O

重做日志

  • 监控对象:重做日志大小、切换频率、归档状态
  • 监控阈值:重做日志切换频率超过每分钟 5 次时告警
  • 监控工具:Oracle 视图(v$log、v$log_history)、Oracle Enterprise Manager
  • 分析方法:检查重做日志配置是否合理,是否有日志争用
  • 优化建议:增加重做日志组和大小、优化提交频率、使用快速归档

临时表空间

  • 监控对象:临时表空间使用情况和增长趋势
  • 监控阈值:临时表空间使用率超过 90% 时告警
  • 监控工具:Oracle 视图(v$temp_space_header、dba_temp_free_space)
  • 分析方法:识别消耗临时空间的操作和 SQL
  • 优化建议:增加临时表空间大小、优化排序和哈希操作、使用临时表空间组

监控工具

Oracle 内置工具

Oracle Enterprise Manager (OEM)

  • 功能特点:提供全面的图形化监控界面,支持实时监控和历史分析
  • 监控范围:系统级、数据库级、SQL 级的所有指标
  • 优势:操作简单,可视化效果好,支持自动告警
  • 劣势:资源消耗较大,需要额外安装配置
  • 适用场景:企业级数据库环境,需要集中监控多个数据库

Automatic Workload Repository (AWR)

  • 功能特点:自动收集数据库性能统计信息,生成详细的性能报告
  • 监控范围:数据库级和 SQL 级的性能指标
  • 优势:提供历史性能数据,支持性能趋势分析
  • 劣势:默认只保留 8 天数据,需要手动生成报告
  • 适用场景:性能问题诊断,定期性能分析

Active Session History (ASH)

  • 功能特点:实时捕获活动会话的等待事件和执行情况
  • 监控范围:会话级的详细活动信息
  • 优势:提供细粒度的会话活动数据,支持实时性能分析
  • 劣势:数据保留时间短,需要及时分析
  • 适用场景:实时性能问题诊断,识别当前系统瓶颈

Statspack

  • 功能特点:轻量级的性能统计工具,类似于 AWR 的简化版
  • 监控范围:数据库级的主要性能指标
  • 优势:资源消耗小,配置简单
  • 劣势:功能不如 AWR 全面,需要手动配置
  • 适用场景:小型数据库环境,资源受限的系统

第三方工具

Zabbix

  • 功能特点:开源的企业级监控解决方案,支持 Oracle 数据库监控
  • 监控范围:系统级和数据库级的主要指标
  • 优势:免费开源,可扩展性强,支持自定义监控项
  • 劣势:配置相对复杂,需要一定的技术知识
  • 适用场景:混合环境监控,需要与其他系统集成

Prometheus + Grafana

  • 功能特点:开源的监控和可视化平台,支持 Oracle 数据库监控
  • 监控范围:系统级和数据库级的主要指标
  • 优势:高性能,可扩展性强,可视化效果好
  • 劣势:需要额外开发 Oracle exporter,配置相对复杂
  • 适用场景:云环境和容器化环境的监控

Datadog

  • 功能特点:SaaS 模式的监控平台,支持 Oracle 数据库监控
  • 监控范围:系统级、数据库级和应用级的全面监控
  • 优势:易于部署,功能丰富,支持自动告警
  • 劣势:收费服务,成本较高
  • 适用场景:企业级环境,需要专业的监控服务

脚本监控

Shell 脚本

  • 功能特点:使用 OS 命令和 SQL*Plus 编写的监控脚本
  • 监控范围:可自定义监控任何指标
  • 优势:灵活定制,资源消耗小,可集成到现有系统
  • 劣势:需要手动编写和维护,缺乏可视化界面
  • 适用场景:特定指标的监控,简单的监控需求

Python 脚本

  • 功能特点:使用 Python 编写的监控脚本,可利用 cx_Oracle 库连接数据库
  • 监控范围:可自定义监控任何指标,支持复杂的数据分析
  • 优势:功能强大,易于维护,支持各种输出格式
  • 劣势:需要安装 Python 和相关库,开发成本较高
  • 适用场景:复杂的监控需求,需要高级数据分析

监控流程

日常监控

每日监控

  • 监控频率:每小时或每日
  • 监控内容
    • 数据库实例状态
    • 表空间使用率
    • 连接数和会话状态
    • 主要性能指标(CPU、内存、I/O)
    • 慢 SQL 语句
    • 重做日志切换频率
  • 监控工具:自动脚本、Oracle Enterprise Manager
  • 处理流程:记录监控结果,发现异常及时处理

每周监控

  • 监控频率:每周一次
  • 监控内容
    • 生成 AWR 报告并分析
    • 检查数据库增长趋势
    • 分析 SQL 执行计划变化
    • 检查索引使用情况
    • 验证备份和恢复状态
  • 监控工具:AWR 报告、SQL Tuning Advisor
  • 处理流程:生成周报,制定优化计划

每月监控

  • 监控频率:每月一次
  • 监控内容
    • 全面的性能评估
    • 数据库配置审查
    • 安全审计
    • 容量规划
    • 性能趋势分析
  • 监控工具:AWR 对比报告、Oracle Enterprise Manager
  • 处理流程:生成月报,更新监控策略和优化计划

实时监控

实时告警

  • 告警触发:当监控指标超过阈值时自动触发
  • 告警级别
    • 紧急:需要立即处理的问题(如数据库宕机)
    • 严重:需要在 4 小时内处理的问题(如 CPU 使用率持续过高)
    • 警告:需要在 24 小时内处理的问题(如表空间使用率接近阈值)
  • 告警方式:邮件、短信、企业微信、钉钉、电话
  • 处理流程
    1. 接收告警信息
    2. 确认告警真实性
    3. 分析问题原因
    4. 执行修复操作
    5. 验证修复结果
    6. 记录处理过程

性能突降处理

  • 触发条件:系统性能突然下降(如响应时间增加 50% 以上)
  • 处理流程
    1. 快速定位瓶颈(使用 ASH 或实时会话监控)
    2. 识别问题 SQL 或操作
    3. 采取紧急措施(如终止异常会话、调整参数)
    4. 进行详细分析
    5. 实施长期解决方案
    6. 记录处理过程和经验教训

监控数据管理

数据收集

收集策略

  • 实时数据:通过视图和系统命令实时收集
  • 历史数据:使用 AWR、Statspack 等工具定期收集
  • 基线数据:建立正常状态下的性能基线,用于对比分析
  • 自定义数据:根据特定需求收集额外的监控数据

收集频率

  • 系统级指标:每 1-5 分钟
  • 数据库级指标:每 5-15 分钟
  • SQL 级指标:每 15-30 分钟
  • 详细分析数据:每 1-6 小时

数据存储

  • Oracle 内置存储:AWR 数据存储在 SYSAUX 表空间
  • 外部存储:使用监控系统的数据库或文件系统存储
  • 数据压缩:对历史数据进行压缩,减少存储空间
  • 数据保留:根据需求设置合理的数据保留期限

数据分析

实时分析

  • 目的:及时发现和处理性能问题
  • 方法:使用 ASH、实时会话监控等工具
  • 重点:识别当前瓶颈和异常会话

趋势分析

  • 目的:预测性能变化和容量需求
  • 方法:分析历史性能数据,建立趋势模型
  • 重点:识别性能逐渐下降的指标,预测资源需求

对比分析

  • 目的:评估优化效果和配置变更影响
  • 方法:对比不同时期的性能数据,如 AWR 对比报告
  • 重点:分析优化前后的性能变化,评估配置变更的影响

关联分析

  • 目的:理解不同指标之间的关系
  • 方法:分析多个指标的变化趋势和相关性
  • 重点:识别指标之间的因果关系,全面理解性能问题

监控最佳实践

监控体系设计

分层监控

  • 基础监控:系统级和数据库级的关键指标
  • 深入监控:SQL 级和应用级的详细指标
  • 专项监控:针对特定业务和应用的定制监控

监控粒度

  • 粗粒度监控:用于日常巡检和总体状态了解
  • 细粒度监控:用于性能问题诊断和深入分析
  • 动态调整:根据系统状态和业务需求动态调整监控粒度

监控覆盖

  • 全面覆盖:确保所有关键指标都有监控
  • 重点突出:对重要业务系统和关键指标加强监控
  • 无盲点:避免监控死角,确保系统的每个部分都能被监控到

监控执行

自动化监控

  • 脚本自动化:使用脚本自动收集和分析监控数据
  • 告警自动化:设置自动告警规则,及时发现问题
  • 报告自动化:定期自动生成监控报告

规范化操作

  • 监控流程:建立标准化的监控流程和操作手册
  • 告警处理:制定统一的告警处理流程和升级机制
  • 记录规范:统一监控数据和处理过程的记录格式

持续优化

  • 监控调整:根据系统变化和业务需求调整监控策略
  • 阈值优化:根据实际情况调整告警阈值
  • 工具升级:及时更新和升级监控工具,利用新特性

问题处理

快速响应

  • 响应时间:建立明确的响应时间要求(如紧急问题 15 分钟内响应)
  • 处理流程:制定标准化的问题处理流程
  • 资源准备:确保必要的工具和资源随时可用

根因分析

  • 分析方法:使用多种工具和方法进行综合分析
  • 问题分类:对性能问题进行分类,建立问题库
  • 经验积累:记录和分享问题处理经验,建立知识库

预防措施

  • 定期检查:定期进行系统健康检查,提前发现潜在问题
  • 容量规划:根据监控数据进行容量规划,避免资源不足
  • 配置优化:根据监控结果持续优化系统配置

版本差异考虑

Oracle 11g

  • 监控工具:支持 Statspack 和基本的 AWR
  • 监控指标:提供核心性能指标,但高级功能有限
  • 告警能力:基本的告警功能,需要手动配置
  • 最佳实践:使用 Statspack 进行定期性能收集,结合脚本监控

Oracle 12c

  • 监控工具:增强了 AWR 和 ASH 功能,支持多租户环境监控
  • 监控指标:增加了更多细粒度的性能指标
  • 告警能力:增强了自动告警功能
  • 最佳实践:充分利用 AWR 和 ASH 进行性能分析,使用 OEM 进行集中监控

Oracle 19c

  • 监控工具:进一步增强了 AWR 和 ASH,支持自动性能诊断
  • 监控指标:增加了更多系统级和数据库级的监控指标
  • 告警能力:支持更智能的自动告警和预测性分析
  • 最佳实践:使用自动性能诊断工具,结合机器学习进行异常检测

Oracle 21c

  • 监控工具:引入了更多自动化的监控功能
  • 监控指标:增加了更多细粒度的监控指标和预测性指标
  • 告警能力:支持更智能的告警和自动修复建议
  • 最佳实践:利用自动化监控和智能分析功能,减少人工干预

常见问题(FAQ)

Q1: 如何确定监控阈值的合理值?

A1: 确定监控阈值的方法:

  • 基准测试:在系统正常运行时收集性能数据,建立基准值
  • 行业标准:参考 Oracle 官方推荐的阈值和行业最佳实践
  • 经验调整:根据实际运行经验,逐步调整阈值
  • 动态阈值:考虑使用动态阈值,根据系统负载自动调整
  • 业务需求:根据业务的重要性和性能要求设置不同的阈值

Q2: 如何处理大量的告警信息?

A2: 处理大量告警信息的方法:

  • 告警分级:对告警进行分级,优先处理严重的告警
  • 告警聚合:将相关的告警聚合为一个,减少重复告警
  • 告警抑制:在维护期间暂时抑制非关键告警
  • 自动处理:对常见的告警实现自动处理
  • 告警优化:分析告警原因,优化系统减少告警
  • 监控调整:调整监控阈值和频率,减少误报

Q3: 如何识别和处理性能瓶颈?

A3: 识别和处理性能瓶颈的方法:

  • 使用 ASH:实时查看活动会话的等待事件,识别当前瓶颈
  • 分析 AWR 报告:查看 Top 5 等待事件和 Top SQL,识别系统瓶颈
  • 使用 SQL Tuning Advisor:分析和优化有问题的 SQL 语句
  • 检查系统资源:确认 CPU、内存、I/O 等系统资源是否充足
  • 对比分析:与历史性能数据对比,识别性能变化趋势
  • 实施优化:根据分析结果,实施相应的优化措施

Q4: 如何优化监控系统的性能和可靠性?

A4: 优化监控系统的方法:

  • 合理设置监控频率:避免过于频繁的监控导致系统负载增加
  • 使用轻量级工具:在资源受限的环境中使用轻量级监控工具
  • 分布式监控:对于大型环境,使用分布式监控架构
  • 监控系统冗余:确保监控系统本身的高可用性
  • 数据存储优化:合理配置监控数据的存储和保留策略
  • 定期维护:定期检查和维护监控系统,确保其正常运行

Q5: 如何进行有效的性能趋势分析?

A5: 进行性能趋势分析的方法:

  • 收集足够的数据:确保有足够的历史性能数据进行分析
  • 设置合理的时间粒度:根据分析需求设置合适的数据收集间隔
  • 使用可视化工具:利用图表和仪表盘直观展示性能趋势
  • 建立基准线:建立系统正常运行时的性能基准线
  • 预测分析:使用统计方法和机器学习预测未来的性能变化
  • 定期审查:定期审查性能趋势,及时发现潜在问题

Q6: 如何监控多租户环境中的性能?

A6: 监控多租户环境性能的方法:

  • 使用 CDB 和 PDB 级别的视图:分别监控容器数据库和可插拔数据库
  • 资源使用监控:监控每个 PDB 的资源使用情况
  • 隔离性能问题:确保一个 PDB 的性能问题不会影响其他 PDB
  • 使用 OEM 的多租户监控功能:利用 OEM 专门的多租户监控功能
  • 定制监控策略:为不同的 PDB 制定不同的监控策略

Q7: 如何监控云环境中的 Oracle 数据库?

A7: 监控云环境中 Oracle 数据库的方法:

  • 使用云提供商的监控服务:如 Oracle Cloud Infrastructure Monitoring
  • 部署第三方监控工具:如 Zabbix、Prometheus 等
  • 利用数据库内置工具:继续使用 AWR、ASH 等内置工具
  • 网络连接监控:特别关注云环境中的网络连接和延迟
  • 安全监控:加强云环境中的数据库安全监控
  • 成本监控:监控云资源使用情况,控制成本

Q8: 如何制定有效的日常监控计划?

A8: 制定日常监控计划的方法:

  • 明确监控目标:根据业务需求和系统特点确定监控目标
  • 选择合适的监控工具:根据环境和需求选择合适的监控工具
  • 设置监控指标和阈值:确定需要监控的指标和相应的阈值
  • 制定监控频率:根据指标的重要性和变化速度确定监控频率
  • 建立告警处理流程:明确告警的处理流程和责任人
  • 定期 review 和调整:定期审查监控计划的有效性,根据实际情况调整

Q9: 如何利用监控数据进行容量规划?

A9: 利用监控数据进行容量规划的方法:

  • 收集历史数据:收集足够长时间的性能和资源使用数据
  • 分析增长趋势:分析数据量、用户数和资源使用的增长趋势
  • 预测未来需求:基于历史趋势预测未来的容量需求
  • 设置安全边际:在规划中预留足够的安全边际
  • 制定扩容计划:根据预测结果制定详细的扩容计划
  • 定期更新规划:根据实际情况定期更新容量规划

Q10: 如何培训团队成员掌握性能监控技能?

A10: 培训团队成员掌握性能监控技能的方法:

  • 基础知识培训:提供 Oracle 数据库性能基础培训
  • 工具使用培训:培训监控工具的使用方法和技巧
  • 实战演练:通过实际案例演练,提高问题诊断能力
  • 知识分享:定期组织内部知识分享,交流监控经验
  • 认证考试:鼓励团队成员参加 Oracle 相关认证考试
  • 外部培训:参加外部专业培训,学习最新的监控技术和方法