Skip to content

Oracle 系统级指标

系统级指标概念

系统级指标定义

  • 系统级指标
    • 用于监控和评估 Oracle 数据库及其运行环境整体状态的指标
    • 反映数据库系统的健康状况、性能水平和资源使用情况
    • 是数据库运维和性能调优的重要依据

指标分类

  • 按监控层次分类

    • 操作系统级指标
    • 数据库实例级指标
    • 存储系统级指标
    • 网络系统级指标
  • 按指标类型分类

    • 资源使用指标
    • 性能指标
    • 可靠性指标
    • 安全指标
    • 容量指标
  • 按监控频率分类

    • 实时监控指标
    • 定期监控指标
    • 趋势分析指标

指标监控目的

  • 健康检查

    • 评估数据库系统的整体健康状况
    • 发现潜在的问题和风险
    • 确保系统的稳定运行
  • 性能优化

    • 识别性能瓶颈
    • 分析性能趋势
    • 优化系统配置和资源分配
  • 故障预警

    • 提前发现可能导致故障的问题
    • 及时采取预防措施
    • 减少故障发生的概率
  • 容量规划

    • 监控资源使用情况
    • 预测资源需求
    • 制定合理的容量扩展计划

操作系统级指标

CPU 指标

  • 利用率

    • 系统 CPU 使用率
    • 用户 CPU 使用率
    • 空闲 CPU 使用率
    • I/O 等待 CPU 使用率
  • 监控命令

    bash
    # Linux
    top
    mpstat
    sar -u
    
    # Windows
    perfmon
    wmic cpu get loadpercentage
  • 告警阈值

    • 持续超过 80% 视为高负载
    • 持续超过 90% 视为严重高负载

内存指标

  • 使用率

    • 物理内存使用率
    • 虚拟内存使用率
    • 交换空间使用率
    • 内存页交换频率
  • 监控命令

    bash
    # Linux
    free -m
    vmstat
    sar -r
    
    # Windows
    perfmon
    wmic OS get FreePhysicalMemory,TotalVisibleMemorySize
  • 告警阈值

    • 物理内存使用率超过 90%
    • 交换空间使用率超过 70%
    • 频繁的内存页交换

磁盘 I/O 指标

  • 性能指标

    • 磁盘读写吞吐量
    • 平均 I/O 响应时间
    • I/O 等待时间
    • 磁盘利用率
  • 监控命令

    bash
    # Linux
    iostat -x
    sar -d
    
    # Windows
    perfmon
    wmic diskdrive get Size,FreeSpace
  • 告警阈值

    • 磁盘利用率超过 80%
    • I/O 响应时间超过 20ms
    • I/O 等待时间占比超过 20%

网络指标

  • 性能指标

    • 网络吞吐量
    • 网络延迟
    • 网络丢包率
    • 网络连接数
  • 监控命令

    bash
    # Linux
    netstat
    sar -n DEV
    ping
    
    # Windows
    perfmon
    netstat -an
    ping
  • 告警阈值

    • 网络延迟超过 100ms
    • 网络丢包率超过 1%
    • 网络连接数接近系统上限

数据库实例级指标

实例状态指标

  • 基本状态

    • 实例启动时间
    • 实例状态(STARTED, MOUNTED, OPEN)
    • 数据库打开模式
    • 归档模式状态
  • 监控 SQL

    sql
    -- 检查实例状态
    SELECT instance_name, status, start_time FROM v$instance;
    
    -- 检查数据库状态
    SELECT name, open_mode, log_mode FROM v$database;

内存管理指标

  • SGA 指标

    • SGA 大小和使用情况
    • 共享池使用情况
    • 缓冲区缓存使用情况
    • 重做日志缓冲区使用情况
  • PGA 指标

    • PGA 聚合目标
    • PGA 使用情况
    • 排序区域使用情况
  • 监控 SQL

    sql
    -- 检查 SGA 使用情况
    SELECT * FROM v$sga;
    SELECT * FROM v$sga_dynamic_components;
    
    -- 检查 PGA 使用情况
    SELECT * FROM v$pgastat;
    SELECT name, value/1024/1024 MB FROM v$sysstat WHERE name LIKE '%PGA%';

进程指标

  • 进程状态

    • 活动会话数
    • 进程数
    • 会话等待事件
    • 锁等待情况
  • 监控 SQL

    sql
    -- 检查活动会话数
    SELECT COUNT(*) FROM v$session WHERE status = 'ACTIVE';
    
    -- 检查会话等待事件
    SELECT event, COUNT(*) FROM v$session_wait GROUP BY event ORDER BY COUNT(*) DESC;
    
    -- 检查锁等待
    SELECT * FROM v$lock WHERE block = 1;

存储指标

  • 表空间使用

    • 表空间使用率
    • 数据文件大小和增长
    • 临时表空间使用情况
    • 撤销表空间使用情况
  • 监控 SQL

    sql
    -- 检查表空间使用情况
    SELECT tablespace_name, 
           ROUND(SUM(bytes)/1024/1024, 2) total_mb, 
           ROUND(SUM(bytes - free_bytes)/1024/1024, 2) used_mb, 
           ROUND((SUM(bytes - free_bytes)/SUM(bytes))*100, 2) used_percent
    FROM (SELECT tablespace_name, bytes, 
                 CASE WHEN maxbytes > bytes THEN maxbytes ELSE bytes END free_bytes
          FROM dba_data_files)
    GROUP BY tablespace_name
    ORDER BY used_percent DESC;

性能指标

  • 响应时间

    • SQL 执行响应时间
    • 事务响应时间
    • 数据库启动时间
  • 吞吐量

    • SQL 执行次数
    • 事务处理量
    • 数据传输量
  • 监控 SQL

    sql
    -- 检查 SQL 执行情况
    SELECT sql_id, elapsed_time, executions, 
           round(elapsed_time/executions/1000000, 4) avg_seconds
    FROM v$sql
    WHERE executions > 0
    ORDER BY elapsed_time DESC
    FETCH FIRST 10 ROWS ONLY;
    
    -- 检查事务处理量
    SELECT name, value FROM v$sysstat WHERE name LIKE '%transaction%';

存储系统级指标

存储使用指标

  • 空间使用

    • 存储总容量
    • 已使用空间
    • 可用空间
    • 空间使用率
  • 监控命令

    bash
    # Linux
    df -h
    
    # Windows
    wmic logicaldisk get size,freespace,caption
  • 告警阈值

    • 空间使用率超过 80%
    • 可用空间低于 10%

存储性能指标

  • I/O 性能

    • 存储 I/O 吞吐量
    • I/O 延迟
    • I/O 操作次数
    • I/O 队列长度
  • 监控工具

    • 存储阵列管理工具
    • 操作系统 I/O 监控工具
    • 第三方存储监控工具
  • 告警阈值

    • I/O 延迟超过 20ms
    • I/O 队列长度持续超过 2

存储可靠性指标

  • 健康状态

    • 存储设备健康状态
    • 磁盘故障情况
    • RAID 状态
    • 存储电池状态
  • 监控工具

    • 存储阵列管理工具
    • SNMP 监控
    • 存储供应商提供的监控工具

网络系统级指标

网络性能指标

  • 带宽使用

    • 网络带宽使用率
    • 峰值带宽使用
    • 平均带宽使用
  • 延迟指标

    • 网络延迟
    • 往返时间 (RTT)
    • 应用响应时间
  • 监控工具

    • netstat
    • ping
    • traceroute
    • 网络监控工具(如 Nagios、Zabbix)

网络连接指标

  • 连接状态

    • 活跃连接数
    • 连接错误率
    • 连接建立时间
  • 监控命令

    bash
    # 检查连接数
    netstat -an | grep ESTABLISHED | wc -l
    
    # 检查连接状态
    netstat -an

网络可靠性指标

  • 丢包率

    • 网络丢包率
    • 重传率
    • 错误数据包率
  • 可用性

    • 网络可用性百分比
    • 网络中断次数
    • 网络恢复时间

指标监控工具

Oracle 内置工具

  • V$ 视图

    • 提供实时的数据库内部状态和性能数据
    • 是监控和分析的基础数据来源
    • 如 v$sysstat, v$sesstat, v$waitstat 等
  • AWR 报告

    • 自动工作负载仓库报告
    • 提供详细的性能统计信息
    • 支持性能趋势分析
  • ASH 报告

    • 活动会话历史报告
    • 提供会话级别的详细等待事件信息
    • 有助于识别短期性能问题
  • ADDM 分析

    • 自动数据库诊断监控器
    • 自动分析数据库性能问题
    • 提供优化建议

操作系统工具

  • Linux/Unix

    • top, vmstat, iostat, sar
    • netstat, ping, traceroute
    • free, df, du
  • Windows

    • 性能监视器 (PerfMon)
    • 任务管理器
    • 资源监视器
    • WMIC 命令行工具

第三方监控工具

  • 企业级监控

    • Oracle Enterprise Manager (OEM)
    • Nagios
    • Zabbix
    • Prometheus + Grafana
    • Datadog
  • 专业数据库监控

    • Toad for Oracle
    • SQL Developer
    • DBArtisan
    • SolarWinds Database Performance Monitor

自定义监控脚本

  • Shell 脚本

    • 用于监控操作系统和网络指标
    • 定期执行并收集数据
    • 生成监控报告和告警
  • SQL 脚本

    • 用于监控数据库内部指标
    • 收集性能数据
    • 分析数据库状态
  • Python 脚本

    • 用于复杂的监控和分析
    • 集成多种数据源
    • 提供高级分析和可视化

指标分析策略

基准建立

  • 性能基准

    • 建立系统正常运行时的性能基准
    • 包括各种指标的正常范围
    • 作为性能分析的参考点
  • 基准调整

    • 根据系统变化定期调整基准
    • 考虑业务量和应用类型的变化
    • 确保基准的准确性和相关性

趋势分析

  • 长期趋势

    • 分析指标的长期变化趋势
    • 预测未来的资源需求
    • 识别潜在的性能退化
  • 季节性分析

    • 分析业务高峰期的指标变化
    • 预测高峰期的资源需求
    • 提前做好资源准备
  • 相关性分析

    • 分析不同指标之间的相关性
    • 识别指标变化的因果关系
    • 制定综合的优化策略

异常检测

  • 阈值告警

    • 设置合理的告警阈值
    • 及时发现异常指标
    • 避免误报和漏报
  • 统计分析

    • 使用统计方法检测异常
    • 基于历史数据的异常检测
    • 识别偏离正常模式的指标
  • 机器学习

    • 利用机器学习算法进行异常检测
    • 自动学习正常模式
    • 提高异常检测的准确性

根因分析

  • 5W1H 分析法

    • What:发生了什么问题
    • Why:为什么会发生
    • When:什么时候发生的
    • Where:在哪里发生的
    • Who:与谁相关
    • How:如何发生的
  • 鱼骨图分析法

    • 确定问题的主要类别
    • 分析每个类别的可能原因
    • 识别根本原因
  • 故障树分析

    • 从顶事件开始分析
    • 逐级分解可能的原因
    • 识别最可能的根因

指标优化建议

CPU 优化

  • 资源分配

    • 为数据库实例分配足够的 CPU 资源
    • 避免其他应用占用过多 CPU
    • 考虑使用 CPU 资源管理(如 Oracle Resource Manager)
  • SQL 优化

    • 优化高 CPU 消耗的 SQL 语句
    • 减少不必要的计算和排序
    • 使用适当的索引
  • 参数调整

    • 调整并行度参数
    • 优化 SGA 和 PGA 配置
    • 调整游标共享参数

内存优化

  • 内存分配

    • 为数据库分配足够的内存
    • 避免内存过度分配导致的交换
    • 考虑使用大页内存
  • SGA 优化

    • 根据工作负载调整 SGA 组件大小
    • 优化共享池和缓冲区缓存
    • 调整内存管理参数
  • PGA 优化

    • 设置合理的 PGA 聚合目标
    • 优化排序和哈希操作的内存使用
    • 监控和调整会话内存使用

存储优化

  • I/O 分布

    • 将数据文件分布到多个磁盘
    • 避免 I/O 热点
    • 使用 RAID 技术提高 I/O 性能
  • 存储配置

    • 选择合适的存储类型(SSD vs HDD)
    • 调整存储缓存设置
    • 优化文件系统参数
  • 数据库配置

    • 使用异步 I/O
    • 调整 DB_WRITER_PROCESSES 参数
    • 优化检查点频率

网络优化

  • 网络配置

    • 确保网络带宽充足
    • 优化网络协议设置
    • 使用高速网络设备
  • 数据库配置

    • 调整 SQL*Net 参数
    • 优化连接池设置
    • 减少网络往返次数
  • 应用优化

    • 减少网络流量
    • 优化数据传输
    • 使用批量操作

最佳实践

监控策略

  • 分层监控

    • 建立多层次的监控体系
    • 从操作系统到数据库内部的全面监控
    • 确保监控的覆盖范围
  • 重点监控

    • 识别关键业务系统和数据库
    • 对关键系统进行重点监控
    • 确保关键指标的监控频率
  • 自动化监控

    • 实现监控的自动化
    • 减少人工干预
    • 提高监控的及时性和准确性

告警管理

  • 阈值设置

    • 根据系统特点设置合理的告警阈值
    • 避免过多的误报
    • 确保重要问题能够及时告警
  • 告警分级

    • 对告警进行分级管理
    • 根据严重程度采取不同的响应措施
    • 确保严重问题得到优先处理
  • 告警集成

    • 集成多种告警渠道
    • 确保告警能够及时送达
    • 建立告警确认和处理流程

数据管理

  • 数据收集

    • 定期收集监控数据
    • 确保数据的完整性和准确性
    • 建立数据仓库存储历史数据
  • 数据分析

    • 定期分析监控数据
    • 识别趋势和异常
    • 提供分析报告和建议
  • 数据保留

    • 制定合理的数据保留策略
    • 平衡存储成本和数据价值
    • 确保数据的安全存储

持续改进

  • 定期回顾

    • 定期回顾监控策略和告警设置
    • 分析监控效果
    • 识别改进空间
  • 经验总结

    • 总结监控和分析的经验
    • 分享成功案例
    • 吸取失败教训
  • 技术更新

    • 关注监控技术的发展
    • 采用新的监控工具和方法
    • 持续提升监控能力

版本差异

Oracle 11g 指标监控

  • 特性

    • 基本的指标监控功能
    • 有限的自动化能力
    • 传统的监控方法
  • 工具

    • 基本的 V$ 视图
    • AWR/ASH 报告
    • OEM 11g

Oracle 12c 指标监控

  • 特性

    • 增强的指标监控功能
    • 多租户环境的监控
    • 改进的自动化能力
  • 工具

    • 增强的 V$ 视图
    • 改进的 AWR/ASH 报告
    • OEM 12c Cloud Control

Oracle 19c 指标监控

  • 特性

    • 自动化指标监控
    • 增强的实时监控
    • 智能告警和诊断
  • 工具

    • 实时性能监控
    • 自动索引优化
    • OEM 13c/19c

Oracle 21c 指标监控

  • 特性

    • 机器学习辅助的指标监控
    • 预测性分析
    • 自动化优化建议
  • 工具

    • ML-based Performance Monitoring
    • 智能故障预测
    • 增强的自动诊断功能

常见问题(FAQ)

Q1: 如何选择关键的系统级指标进行监控?

A1: 选择原则:

  • 相关性:与业务需求和系统特点相关
  • 敏感性:能够敏感反映系统状态变化
  • 可操作性:监控结果能够指导实际操作
  • 代表性:能够代表系统的整体状态
  • 最佳实践
    • 核心业务系统:监控 CPU、内存、I/O、网络、关键数据库指标
    • 一般业务系统:监控基本资源使用和数据库健康状态
    • 开发测试系统:监控基本可用性指标

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

A2: 设置方法:

  • 基准分析:基于历史数据和系统特点建立基准
  • 渐进调整:从保守设置开始,逐步调整到合理水平
  • 分层设置:设置多个级别的告警阈值(警告、严重、紧急)
  • 业务考虑:考虑业务高峰期的特殊需求
  • 示例
    • CPU 使用率:警告 70%,严重 85%,紧急 95%
    • 内存使用率:警告 80%,严重 90%,紧急 95%
    • 磁盘空间:警告 75%,严重 85%,紧急 95%

Q3: 如何处理大量的监控数据和告警?

A3: 处理策略:

  • 数据聚合:对监控数据进行聚合和汇总
  • 智能分析:使用自动化工具分析数据和告警
  • 告警过滤:过滤冗余和无关的告警
  • 告警关联:关联相关的告警,减少告警噪音
  • 分级响应:根据告警级别采取不同的响应措施
  • 自动化处理:对常见问题实现自动化处理

Q4: 如何利用监控数据进行性能优化?

A4: 优化方法:

  • 趋势分析:分析监控数据的长期趋势
  • 瓶颈识别:识别系统性能瓶颈
  • 根因分析:分析性能问题的根本原因
  • 方案制定:基于分析结果制定优化方案
  • 实施验证:实施优化方案并验证效果
  • 持续改进:建立性能优化的闭环流程

Q5: 如何建立有效的监控体系?

A5: 体系建设:

  • 明确目标:确定监控的目标和范围
  • 选择工具:选择适合的监控工具和方法
  • 建立流程:建立监控、告警、处理的完整流程
  • 培训人员:培训运维人员掌握监控技能
  • 持续优化:定期评估和优化监控体系
  • 集成管理:将监控体系与其他运维流程集成

Q6: 如何监控分布式环境中的数据库系统?

A6: 监控策略:

  • 集中监控:建立集中的监控平台
  • 网络监控:加强网络连接和延迟的监控
  • 同步监控:监控数据同步状态和延迟
  • 负载均衡:监控负载均衡状态
  • 故障转移:监控故障转移机制的状态
  • 统一告警:建立统一的告警和响应机制

Q7: 如何预测系统容量需求?

A7: 预测方法:

  • 历史分析:分析历史资源使用趋势
  • 业务预测:根据业务增长预测资源需求
  • 模拟测试:通过负载测试评估容量需求
  • 基准比较:与类似系统的容量使用情况比较
  • 工具辅助:使用专业的容量规划工具
  • 定期评估:定期重新评估容量需求

Q8: 如何确保监控系统本身的可靠性?

A8: 保障措施:

  • 冗余设计:监控系统本身的冗余设计
  • 故障转移:监控系统的故障转移机制
  • 自我监控:监控系统的自我监控
  • 定期测试:定期测试监控系统的功能
  • 备份恢复:监控数据的备份和恢复
  • 独立部署:监控系统独立于被监控系统部署

Q9: 如何平衡监控的全面性和系统开销?

A9: 平衡策略:

  • 分级监控:根据系统重要性采用不同的监控级别
  • 采样优化:优化监控数据的采样频率
  • 数据压缩:压缩和优化监控数据
  • 智能采集:根据系统状态调整采集频率
  • 资源限制:限制监控工具的资源使用
  • 定期评估:定期评估监控开销和收益

Q10: 如何将监控与自动化运维相结合?

A10: 结合方法:

  • 自动响应:对常见问题实现自动响应
  • 自动修复:对可预测的问题实现自动修复
  • 自动优化:基于监控数据实现自动优化
  • 自动扩展:根据监控数据实现自动扩展
  • 智能决策:使用 AI 辅助运维决策
  • 闭环管理:建立监控-分析-决策-执行的闭环