重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 111|回复: 0
打印 上一主题 下一主题

[参数设置] WRH$_ACTIVE_SESSION_HISTORY;性能诊断数据

[复制链接]
跳转到指定楼层
楼主
发表于 7 天前 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
======================
WRH$_ACTIVE_SESSION_HISTORY
======================


WRH$_ACTIVE_SESSION_HISTORY 是 Oracle 数据库中的一张历史系统表,用于永久保存数据库的性能诊断数据。

它是 Oracle 性能诊断工具 AWR (Automatic Workload Repository, 自动工作负载库) 的核心组成部分。

与实时数据的区别:它存储的是历史数据。其数据源是内存中的 V$ACTIVE_SESSION_HISTORY (ASH),后者只记录约一小时内的活动会话实时信息,数据库重启后就会丢失。

与核心视图的关系:我们通常查询的性能视图 DBA_HIST_ACTIVE_SESS_HISTORY,本质上就是 WRH$_ACTIVE_SESSION_HISTORY 等基础表的联合视图。

功能与存储位置:Oracle 的后台进程 MMON 会每小时将内存中的 ASH 数据采样并写入此表,从而永久保存。这些数据默认保留 8 天,存储在 SYSAUX 表空间 中。
---------------------------------------------
⚠️ 常见问题:SYSAUX 表空间爆满

这是一个在生产环境中非常常见的问题。WRH$_ACTIVE_SESSION_HISTORY 数据量巨大,常成为 SYSAUX 表空间被撑满的“罪魁祸首”。

问题原因:最典型的原因是 AWR 的自动清理机制失效。根据保留策略(如保留8天),Oracle 应自动按分区删除过期数据。但如果分区创建失败(如因 Bug 或表空间满),所有数据会挤在一个分区里,导致旧数据无法被自动清除,从而无限增长。

----------------
处理方法:

1. 立即释放空间(激进):在问题严重时可临时截断表以快速释放空间。但请注意,这会清空所有历史性能数据,可能影响后续问题追溯。

sql> TRUNCATE TABLE WRH$_ACTIVE_SESSION_HISTORY;

2. 根本解决办法:修正 AWR 配置或打补丁修复分区 Bug,恢复其正常的自动清理能力。

=================================
如何查看保留策略
=================================
查看AWR(自动工作负载库)快照的保留策略,可以通过查询 DBA_HIST_WR_CONTROL 视图来实现。这个视图里存放着工作负载库的所有控制信息,包括快照的生成频率和保留时间 。

使用下面的SQL语句来查询:

SELECT DBID,
       SNAP_INTERVAL,   -- 快照间隔
       RETENTION        -- 保留周期
FROM DBA_HIST_WR_CONTROL;
--
执行后,你将会看到类似下面的输出。这代表数据库每小时生成一次快照,并且保留8天的数据 :

DBID    SNAP_INTERVAL    RETENTION
1234567890    +00000 01:00:00.0    +00008 00:00:00.0

--关于保留时间的说明:
在 Oracle 11g 及之后的版本中,AWR 快照的默认保留期是 8天,而在更早的10g版本中,默认是7天 。
时间字段的格式是 [天数] [小时]:[分钟]:[秒]。所以 +00008 00:00:00.0 就表示保留8天。
==================================
🔧 如何解读与修改保留策略

1. 发现策略失效问题

查看 RETENTION 的值只是第一步。更重要的是检查这个策略是否在正常执行。

正如你之前关注的 WRH$_ACTIVE_SESSION_HISTORY 表异常增长问题,很可能就是因为清理机制失效。分区是AWR进行清理的关键,你可以通过以下SQL检查该表的分区情况 :

SELECT table_name, partition_name, high_value
FROM dba_tab_partitions
WHERE table_name = 'WRH$_ACTIVE_SESSION_HISTORY';

如果发现所有数据都堆积在一个或极少数分区中,就说明自动清理功能可能因为某些原因(如BUG)没有生效 。
2. 修改保留策略

如果需要调整快照的频率或保留时间,可以使用 DBMS_WORKLOAD_REPOSITORY 包下的 MODIFY_SNAPSHOT_SETTINGS 存储过程 。

例如,下面的命令将快照间隔改为30分钟,保留时间改为2天:

BEGIN
  DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
    interval => 30,            -- 间隔:30分钟
    retention => 2*24*60       -- 保留:2天 (2天 * 24小时 * 60分钟)
  );
END;
/
----------------------------------------
interval 和 retention 这两个参数的单位都是分钟 。

此外,在Oracle Cloud(云上环境)或通过Enterprise Manager(企业管理器)等图形化管理工具,也可以在性能中心的AWR设置页面中,直观地查看和修改这些参数









分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-5-24 06:51 , Processed in 0.204832 second(s), 23 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表