Skip to content

Oracle 监控数据存储

监控数据类型

性能相关数据

AWR 数据

  • 描述

    • 自动工作负载仓库(AWR)数据
    • 包含系统级别和SQL级别的性能统计信息
    • 存储在 SYSAUX 表空间中
  • 数据内容

    • 系统负载信息
    • SQL 执行统计
    • 等待事件数据
    • 资源使用情况
    • 段级别统计

ASH 数据

  • 描述

    • 活动会话历史(ASH)数据
    • 捕获活动会话的详细信息
    • 存储在内存和 SYSAUX 表空间中
  • 数据内容

    • 活动会话的等待事件
    • SQL 执行计划信息
    • 会话级别的资源使用
    • 绑定变量值

Statspack 数据

  • 描述

    • 轻量级性能统计数据
    • 类似 AWR 但存储在用户表中
    • 适合没有 AWR 许可的环境
  • 数据内容

    • 系统性能统计
    • SQL 执行信息
    • 等待事件数据
    • 资源使用情况

告警相关数据

告警日志数据

  • 描述

    • 数据库告警日志信息
    • 存储在文件系统中
    • 包含数据库启动、关闭、错误等信息
  • 数据内容

    • 数据库错误信息
    • 警告信息
    • 管理操作记录
    • 安全相关事件

跟踪文件数据

  • 描述

    • 会话和进程的跟踪信息
    • 存储在文件系统中
    • 包含详细的诊断信息
  • 数据内容

    • SQL 执行跟踪
    • 进程崩溃信息
    • 详细的错误诊断
    • 性能分析数据

监控数据存储配置

AWR 数据存储配置

快照设置

sql
-- 查看当前 AWR 快照设置
SELECT * FROM dba_hist_wr_control;

-- 修改 AWR 快照间隔和保留时间(示例:每小时采集,保留7天)
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
    retention => 7*24*60,  -- 保留时间(分钟)
    interval => 60,         -- 采集间隔(分钟)
    topnsql => 100          -- 每个快照收集的 Top SQL 数量
);

基线设置

sql
-- 创建 AWR 基线
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(
    start_snap_id => 100,
    end_snap_id => 110,
    baseline_name => 'NORMAL_WORKLOAD',
    description => '正常工作负载基线'
);

-- 查看现有基线
SELECT * FROM dba_hist_baseline;

ASH 数据存储配置

内存设置

sql
-- 查看 ASH 内存配置
SELECT * FROM v$ash_info;

-- 修改 ASH 内存大小(示例:100MB)
ALTER SYSTEM SET ash_size=100M SCOPE=SPFILE;

数据持久化

sql
-- 查看 ASH 数据持久化设置
SELECT * FROM dba_hist_ash_snapshot;

-- ASH 数据会自动持久化为 AWR 数据的一部分
-- 可以通过调整 AWR 快照设置来控制 ASH 数据的保留

告警日志存储配置

日志文件位置

sql
-- 查看告警日志文件位置
SELECT value FROM v$parameter WHERE name = 'background_dump_dest';

-- 查看告警日志内容
SELECT * FROM v$diag_info WHERE name = 'Diag Alert';

日志轮换设置

  • 配置方法
    • 使用 log_archive_dest 参数设置归档日志目标
    • 配置 log_archive_max_processes 参数控制归档进程数
    • 设置合理的归档日志保留策略

监控数据存储策略

存储介质选择

本地存储

  • 优点

    • 访问速度快
    • 配置简单
    • 成本较低
  • 缺点

    • 存储容量有限
    • 存在单点故障风险
    • 不适合长期存储

网络存储

  • 优点

    • 存储容量大
    • 易于扩展
    • 支持共享访问
  • 缺点

    • 访问速度相对较慢
    • 网络依赖
    • 配置复杂度较高

云存储

  • 优点

    • 弹性扩展能力
    • 按需付费模式
    • 高可用性
    • 适合长期归档
  • 缺点

    • 网络依赖
    • 数据传输速度受限
    • 长期存储成本可能较高

分层存储策略

热数据存储

  • 描述

    • 近期的监控数据
    • 访问频率高
    • 需要快速访问
  • 存储介质

    • 本地 SSD
    • 高性能存储

温数据存储

  • 描述

    • 中期的监控数据
    • 访问频率中等
    • 保留时间较长
  • 存储介质

    • 网络存储
    • 大容量 HDD

冷数据存储

  • 描述

    • 长期的监控数据
    • 访问频率低
    • 用于历史分析和合规性
  • 存储介质

    • 云存储
    • 磁带存储

监控数据管理

数据收集管理

收集频率设置

  • 建议频率

    • 核心性能数据:5-15分钟
    • 详细性能数据:30-60分钟
    • 告警数据:实时
    • 趋势数据:1-24小时
  • 调整策略

    • 根据系统负载调整收集频率
    • 业务高峰期可适当增加收集频率
    • 非业务高峰期可减少收集频率

收集级别设置

  • 详细级别

    • 基础级别:收集核心指标
    • 标准级别:收集详细指标
    • 诊断级别:收集完整的诊断数据
  • 使用场景

    • 正常运行:基础级别
    • 性能分析:标准级别
    • 故障诊断:诊断级别

数据保留管理

AWR 数据保留

sql
-- 查看 AWR 数据保留设置
SELECT * FROM dba_hist_wr_control;

-- 修改 AWR 数据保留时间(示例:保留30天)
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
    retention => 30*24*60  -- 保留时间(分钟)
);

告警日志保留

  • 保留策略

    • 生产环境:3-6个月
    • 测试环境:1-3个月
    • 开发环境:1个月以内
  • 管理方法

    • 配置日志轮换
    • 实施日志压缩
    • 使用日志管理工具

跟踪文件保留

  • 保留策略

    • 正常情况下:7-14天
    • 故障诊断期间:直到问题解决
    • 重要事件:按需保留
  • 管理方法

    • 自动清理过期文件
    • 对重要文件进行归档
    • 限制跟踪文件大小

监控数据清理

AWR 数据清理

sql
-- 手动清理 AWR 数据(示例:删除10天前的快照)
EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(
    low_snap_id => 1,
    high_snap_id => 100,
    dbid => NULL
);

-- 清理指定范围的 AWR 数据
EXEC DBMS_WORKLOAD_REPOSITORY.PURGE(
    begin_snap => 1,
    end_snap => 100,
    dbid => NULL
);

告警日志清理

  • 自动清理

    • 配置日志轮换机制
    • 使用 logrotate 工具(Linux)
    • 配置 Windows 事件日志属性
  • 手动清理

    • 压缩归档旧日志
    • 删除过期日志文件
    • 确保清理不影响正在写入的日志

跟踪文件清理

sql
-- 查找并删除过期的跟踪文件
-- 在 Linux/Unix 系统
find /path/to/trace -name "*.trc" -mtime +7 -delete
find /path/to/trace -name "*.trm" -mtime +7 -delete

-- 在 Windows 系统
-- 使用 PowerShell 脚本清理过期文件

SYSAUX 表空间管理

  • 监控 SYSAUX 表空间使用
sql
-- 查看 SYSAUX 表空间使用情况
SELECT * FROM v$sysaux_occupants ORDER BY space_usage_kbytes DESC;

-- 查看 SYSAUX 表空间大小和使用情况
SELECT tablespace_name, sum(bytes)/1024/1024 MB, sum(maxbytes)/1024/1024 MAX_MB
FROM dba_data_files WHERE tablespace_name = 'SYSAUX' GROUP BY tablespace_name;

SELECT tablespace_name, used_percent
FROM dba_tablespace_usage_metrics WHERE tablespace_name = 'SYSAUX';
  • 清理 SYSAUX 表空间
sql
-- 清理 AWR 数据
EXEC DBMS_WORKLOAD_REPOSITORY.PURGE(
    begin_snap => 1,
    end_snap => (SELECT MAX(snap_id) FROM dba_hist_snapshot),
    dbid => (SELECT dbid FROM v$database)
);

-- 清理 ASH 数据
EXEC DBMS_WORKLOAD_REPOSITORY.PURGE_ASH(
    oldest_timestamp => SYSDATE - 7
);

版本差异考虑

Oracle 11g 监控数据存储特点

  • AWR 数据

    • 存储在 SYSAUX 表空间中
    • 默认保留时间为 7 天
    • 默认快照间隔为 1 小时
  • ASH 数据

    • 内存中保留约 1 小时
    • 持久化到 AWR 中

Oracle 12c 监控数据存储特点

  • 增强的 AWR

    • 支持多租户架构
    • 可在 CDB 和 PDB 级别收集数据
    • 增强了 AWR 基线功能
  • 统一审计数据

    • 存储在统一审计表中
    • 提供更全面的审计信息

Oracle 19c 监控数据存储特点

  • 自动索引数据

    • 存储自动索引相关的监控数据
    • 帮助优化索引使用
  • 机器学习相关数据

    • 存储性能分析和预测数据
    • 支持智能性能调优

生产环境最佳实践

监控数据存储配置

  • SYSAUX 表空间配置

    • 为 SYSAUX 表空间预留足够空间
    • 启用自动扩展
    • 监控空间使用情况
  • 告警日志配置

    • 配置合理的日志轮换策略
    • 启用日志归档
    • 监控日志文件大小
  • 跟踪文件配置

    • 限制单个跟踪文件大小
    • 配置跟踪文件自动清理
    • 对重要跟踪文件进行归档

监控数据管理策略

  • 定期清理

    • 制定监控数据清理计划
    • 定期清理过期数据
    • 确保清理操作不影响系统性能
  • 数据备份

    • 备份重要的监控数据
    • 确保备份数据可恢复
    • 测试备份恢复流程
  • 性能优化

    • 优化监控数据收集频率
    • 合理设置数据保留时间
    • 避免监控数据过度增长

监控与告警

  • 存储监控

    • 监控监控数据存储的使用情况
    • 设置存储容量告警阈值
    • 预测存储容量需求
  • 性能告警

    • 监控监控数据收集对系统性能的影响
    • 设置合理的性能告警阈值
    • 及时调整监控策略

常见问题(FAQ)

Q1: 如何管理 AWR 数据的存储和保留?

A1: 管理 AWR 数据的存储和保留的方法:

  • 使用 DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS 调整快照间隔和保留时间
  • 定期使用 DBMS_WORKLOAD_REPOSITORY.PURGE 清理过期数据
  • 监控 SYSAUX 表空间使用情况,确保有足够空间
  • 对于重要的性能数据,创建 AWR 基线进行长期保留

Q2: 如何处理 SYSAUX 表空间增长过快的问题?

A2: 处理 SYSAUX 表空间增长过快的问题:

  • 检查占用 SYSAUX 表空间的主要对象
  • 调整 AWR 数据保留时间和快照间隔
  • 清理过期的 AWR 和 ASH 数据
  • 考虑使用分区表来管理大型监控表
  • 必要时扩展 SYSAUX 表空间

Q3: 如何设置合理的监控数据收集频率?

A3: 设置合理的监控数据收集频率的建议:

  • 核心性能指标:5-15分钟
  • 详细性能数据:30-60分钟
  • 趋势数据:1-24小时
  • 告警数据:实时

同时,根据系统负载和业务需求进行调整:

  • 业务高峰期可适当增加收集频率
  • 非业务高峰期可减少收集频率
  • 对于性能问题排查,可临时提高收集频率

Q4: 如何选择合适的监控数据存储介质?

A4: 选择合适的监控数据存储介质的建议:

  • 热数据(近期数据):使用本地 SSD 或高性能存储
  • 温数据(中期数据):使用网络存储或大容量 HDD
  • 冷数据(长期数据):使用云存储或磁带存储

同时考虑以下因素:

  • 数据访问频率
  • 存储容量需求
  • 预算限制
  • 数据保留期限
  • 灾难恢复需求

Q5: 如何确保监控数据的安全性?

A5: 确保监控数据安全性的措施:

  • 对监控数据实施访问控制
  • 加密敏感的监控数据
  • 定期备份监控数据
  • 实施监控数据的审计
  • 限制监控数据的访问权限

Q6: 如何优化监控数据对系统性能的影响?

A6: 优化监控数据对系统性能影响的方法:

  • 合理设置监控数据收集频率
  • 避免在业务高峰期执行密集的监控数据收集
  • 使用轻量级监控工具和方法
  • 对监控数据收集过程进行性能调优
  • 考虑使用专用的监控服务器

Q7: 如何制定监控数据的长期归档策略?

A7: 制定监控数据长期归档策略的建议:

  • 建立分层存储架构(热、温、冷数据)
  • 对冷数据实施压缩和归档
  • 考虑使用云存储进行长期归档
  • 制定数据归档和检索流程
  • 定期检查归档数据的完整性和可访问性