拓扑园

  • O&M
    • Universal部署
    • PHP+VUE+Laravel相关
  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队—Linux/Oracle脚本/MySQL合集(持续更新)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL
    • MySQL数据库规范
    • MySQL项目案例
    • MySQL安装配置
    • MYSQL集群项目
    • MySQL常见处理
    • MySQL-Sysbench专题
    • MySQL-Percona Toolkit专题
  • Linux
    • Shell编程
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • D8-Python学习
    • Oracle/MySQl等面试题
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
天高任鸟飞
Oracle/MySQL数据库恢复/数据迁移/生产规范报告技术交流:TEL:18562510581(微信同号);加微信入群
  1. 首页
  2. Oracle基础知识
  3. 图灵小队
  4. 正文

SYSAUX 表空间历史统计数据过大的处理办法——WRI$_OPTSTAT_HISTGRM_HISTORY

2021年10月8日 3907点热度 0人点赞 0条评论

目录

  • 一、OPTSTAT是干什么的
  • 二、处理步骤1:清理SYSAUX下的历史统计信息
    • 1、将历史统计信息保留时间设为无限:
    • 2、truncate较大的TABLE:
    • 3、清理历史统计信息
      • (1)清理历史统计信息
      • (2)重新进行上述表的收集:
    • 4、将历史统计信息保留时间设为7天
    • 5、将历史统计信息相关的表进行MOVE,并重建索引
    • 6、对MOVE表的统计信息进行收集
  • 三、步骤处理2:清理SYAUX下的无效ASH信息 
    • 2、清理无效的ASH信息
    • 3、对ASH表清理后的碎片整理
    • 4、收集碎片整理后表的统计信息
    • 四、处理步骤3: SYSAUX清理后的检查 
    • 2、清理后的INDEX并行度检查

一、OPTSTAT是干什么的

SM/OPTSTAT是用于存储老的统计信息。

(1)10G之前,当对表/字段/索引做了相应的统计信息之后,新的统计信息就会覆盖老的统计信息,也就是说的无法直接找回统计信息,要找回,只能事先通过dbms_stats导出来。

(2)10G之后,就不必了,它会自动的存到相应的表里,而这些表是存在sysaux的,但这也引出了一个问题:如果这些表的数据不断的增长,而不把老的数据删除的话,sysaux迟早会被撑爆。

默认的情况下,系统会为SM/OPTSTAT保留31天的记录,可以通过dbms_stats.get_stats_history_retention 来确定。

这里的统计信息跟AWR是有区别的, AWR默认保留7天. SM/OPTSTAT保留的时间可以通过dbms_stats.alter_stats_history_retention来控制。

如果SM/OPTSTAT确实占用了比较多的空间,要删除某个时间前的记录可以用:dbms_stats.purge_stats。

这个SP其实只从存储历史统计信息的表里删除记录,这样的话,就会出现一种情况,删除了大量的数据,但这些表占用的空间并没有释放,也就是HWM不会降下来的。

这时要手工处理。

二、处理步骤1:清理SYSAUX下的历史统计信息

1、将历史统计信息保留时间设为无限:

exec dbms_stats.alter_stats_history_retention(-1);

2、truncate较大的TABLE:

truncate table sys.WRI$_OPTSTAT_HISTHEAD_HISTORY; 
truncate table sys.WRI$_OPTSTAT_HISTGRM_HISTORY;

3、清理历史统计信息

(1)清理历史统计信息

exec dbms_stats.purge_stats(sysdate-101);  --保留101天
exec dbms_stats.purge_stats(sysdate-51);   --保留51天
exec dbms_stats.purge_stats(sysdate-5);    --保留5天

(2)重新进行上述表的收集:

begin
dbms_stats.gather_table_stats(ownname => 'SYS',
tabname => 'WRI$_OPTSTAT_HISTGRM_HISTORY',
estimate_percent =>
dbms_stats.AUTO_SAMPLE_SIZE,
method_opt => 'for all indexed columns',
cascade => true,
degree => 2);
end;
/

4、将历史统计信息保留时间设为7天

exec dbms_stats.alter_stats_history_retention(7);

5、将历史统计信息相关的表进行MOVE,并重建索引

alter table sys.WRI$_OPTSTAT_HISTHEAD_HISTORY move tablespace sysaux; 
alter index sys.I_WRI$_OPTSTAT_HH_OBJ_ICOL_ST rebuild online; 
alter index sys.I_WRI$_OPTSTAT_HH_ST rebuild online; 
alter table sys.WRI$_OPTSTAT_HISTGRM_HISTORY move tablespace sysaux; 
alter index sys.I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST rebuild online; 
alter index sys.I_WRI$_OPTSTAT_H_ST rebuild online; 
alter table sys.WRI$_OPTSTAT_IND_HISTORY move tablespace sysaux; 
alter index sys.I_WRI$_OPTSTAT_IND_OBJ#_ST rebuild online; 
alter index sys.I_WRI$_OPTSTAT_IND_ST rebuild online; 
alter table sys.WRI$_OPTSTAT_TAB_HISTORY move tablespace sysaux; 
alter index sys.I_WRI$_OPTSTAT_TAB_OBJ#_ST rebuild online; 
alter index sys.I_WRI$_OPTSTAT_TAB_ST rebuild online; 
ALTER TABLE SYS.WRI$_OPTSTAT_OPR MOVE TABLESPACE SYSAUX; 
ALTER TABLE SYS.WRI$_OPTSTAT_AUX_HISTORY MOVE TABLESPACE SYSAUX; 
ALTER INDEX SYS.I_WRI$_OPTSTAT_AUX_ST REBUILD ONLINE; 
ALTER INDEX SYS.I_WRI$_OPTSTAT_OPR_STIME REBUILD ONLINE; 

6、对MOVE表的统计信息进行收集

EXEC dbms_stats.gather_table_stats(ownname => ‘SYS’,tabname => ‘WRI$_OPTSTAT_HISTHEAD_HISTORY’,cascade => TRUE); 
EXEC dbms_stats.gather_table_stats(ownname => ‘SYS’,tabname => ‘WRI$_OPTSTAT_HISTGRM_HISTORY’,cascade => TRUE); 
EXEC dbms_stats.gather_table_stats(ownname => ‘SYS’,tabname => ‘WRI$_OPTSTAT_IND_HISTORY’,cascade => TRUE); 
EXEC dbms_stats.gather_table_stats(ownname => ‘SYS’,tabname => ‘WRI$_OPTSTAT_TAB_HISTORY’,cascade => TRUE); 
EXEC dbms_stats.gather_table_stats(ownname => ‘SYS’,tabname => ‘WRI$_OPTSTAT_OPR’,cascade => TRUE); 
EXEC dbms_stats.gather_table_stats(ownname => ‘SYS’,tabname => ‘WRI$_OPTSTAT_AUX_HISTORY’,cascade => TRUE);

三、步骤处理2:清理SYAUX下的无效ASH信息 

1、检查是否有无效的ASH信息

select count(*) from sys.wrh$_active_session_history a where not exists (select 1 
from sys.wrm$_snapshot b where a.snap_id = b.snap_id and a.dbid = b.dbid and a.instance_number = b.instance_number);

2、清理无效的ASH信息

Delete from sys.wrh$_active_session_history a where not exists (select 1 from sys.wrm$_snapshot b where a.snap_id = b.snap_id and a.dbid = b.dbid and a.instance_number = b.instance_number);

3、对ASH表清理后的碎片整理

alter table sys.wrh$_active_session_history enable row movement;
alter table sys.wrh$_active_session_history shrink space cascade;
alter table sys.wrh$_active_session_history disable row movement;

4、收集碎片整理后表的统计信息

EXEC dbms_stats.gather_table_stats(ownname => ‘SYS’,tabname => ‘WRH$_ACTIVE_SESSION_HISTORY’,cascade => TRUE);

5、检查表空间可收缩的的位置

select a.FILE#,a.NAME,a.BYTES / 1024 / 1024 mb,ceil(HWM * A.BLOCK_SIZE) / 1024 / 1024 RESIZETO,‘ALTER DATABASE DATAFILE ”’ || A.NAME || ”’ RESIZE ‘ ||(trunc(CEIL(HWM * A.BLOCK_SIZE) / 1024 / 1024)+20) || ‘M;’ RESIZECMD from v$datafile a,(SELECT C.file_id, MAX(C.block_id + C.blocks – 1) HWM 
FROM DBA_EXTENTS C GROUP BY FILE_ID) B WHERE A.FILE# = B.FILE_ID AND a.tablespace=’SYSAUX’ORDER BY 5;

四、处理步骤3: SYSAUX清理后的检查 

1、清理后的无效INDEX检查

select * from dba_indexes where status<>‘VALID’ AND STATUS<>‘N/A’; 
SELECT * FROM DBA_IND_PARTITIONS WHERE STATUS<>‘USABLE’ AND STATUS<>‘N/A’; 
SELECT * FROM DBA_IND_SUBPARTITIONS WHERE STATUS<>‘USABLE’;

上面语句应均无数据返回,如有则对这些INDEX进行重建

2、清理后的INDEX并行度检查

select * from dba_indexes where degree not in (‘1’,’0’,’DEFAULT’); 

至此,SYSAUX表空间OPTSTAT数据量过大清理完毕。
本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2021年10月8日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号