Oracle database SYSAUX 表空间占用率过高处理方案

Oracle database SYSAUX 表空间占用率过高处理方案(WRI$_ADV_OBJECTS)

适用场景:
Oracle 12c/19c SYSAUX 表空间异常暴涨,WRI$_ADV_OBJECTS 及其索引占用几十 GB,数据库告警、空间不足。
核心原因:
统计信息顾问任务(AUTO_STATS_ADVISOR_TASK) 无限生成历史诊断日志,无自动清理机制。

一、问题背景

生产环境 Oracle 数据库 SYSAUX 表空间使用率持续飙升,通过查询发现:

核心占用对象:WRI$_ADV_OBJECTS(表)+ 3 个索引,合计占用 10GB+

该表为Oracle 统计信息顾问任务日志表,仅存储数据库体检历史报告,非业务数据、可安全清理

二、前置检查 SQL

1. 全库表空间使用率查询

SQL 复制代码
-- 表空间使用率统计(GB)
SELECT
    dt.tablespace_name as tablespace,
    dt.contents as type,
    dt.block_size * dtum.used_space /1024/1024/1024 as use_bytes,
    dt.block_size * dtum.tablespace_size /1024/1024/1024 as max_bytes,
    dt.block_size * (dtum.tablespace_size - dtum.used_space) /1024/1024/1024 as free,
    round(dtum.used_percent ,2) as used_percent
FROM  dba_tablespace_usage_metrics dtum, dba_tablespaces dt
WHERE dtum.tablespace_name = dt.tablespace_name
and dt.contents != 'TEMPORARY'
union
SELECT
    dt.tablespace_name as tablespace,
    'TEMPORARY' as type,
    dt.tablespace_size /1024/1024/1024 - dt.free_space /1024/1024/1024 as use_bytes,
    dt.tablespace_size /1024/1024/1024 as max_bytes,
    dt.free_space /1024/1024/1024 as free,
   round( ((dt.tablespace_size - dt.free_space) / dt.tablespace_size )*100 ,2)  AS used_percent
FROM  dba_temp_free_space dt
order by tablespace;

2. SYSAUX 内部对象占用 TOP 查询

sql 复制代码
-- 查看SYSAUX空间占用大户
SELECT 
  owner,segment_name,segment_type,bytes/1024/1024 size_mb
FROM dba_segments 
WHERE tablespace_name='SYSAUX'
ORDER BY bytes DESC;

三、核心清理 SQL

【重要前提】

必须使用 SYS / SYSDBA 执行

优先在业务低峰期操作

1:删除异常统计顾问任务

sql 复制代码
-- 删除导致日志暴增的系统自动任务
DECLARE
  v_tname VARCHAR2(100);
BEGIN
  v_tname := 'AUTO_STATS_ADVISOR_TASK';
  DBMS_STATS.DROP_ADVISOR_TASK(v_tname);
END;
/

说明:删除后不影响业务、不影响统计信息自动收集,仅关闭冗余体检报告。

由于数据堆积、 删除动作会执行很长时间以下为监控任务状态sql

会话 / 事务监控
sql 复制代码
-- 查看SYS用户活动会话
SELECT s.sid, s.serial#, s.status, s.event, s.state, s.seconds_in_wait
FROM v$session s
WHERE s.username = 'SYS' AND s.status = 'ACTIVE' AND s.program LIKE '%sqlplus%';

-- 查看SYS会话运行中的事务(回滚块/处理记录)
SELECT s.sid, 
       s.serial#,
       t.start_time "任务开始时间",
       t.used_ublk "回滚块数",
       t.used_urec "处理记录数"
FROM v$session s, v$transaction t
WHERE s.saddr = t.ses_addr
  AND s.username = 'SYS' 
  AND s.program LIKE '%sqlplus%';
  
-- 重置统计信息包(恢复正常功能)
EXEC DBMS_STATS.INIT_PACKAGE();

2:收缩表 + 重建索引

sql 复制代码
-- 收缩表,降低高水位线
ALTER TABLE WRI$_ADV_OBJECTS MOVE;

-- 重建索引(MOVE后索引失效,必须重建)
ALTER INDEX WRI$_ADV_OBJECTS_PK REBUILD;
ALTER INDEX WRI$_ADV_OBJECTS_IDX_01 REBUILD;
ALTER INDEX WRI$_ADV_OBJECTS_IDX_02 REBUILD;

执行效果:

表 + 索引从 10GB+ → 几 MB

SYSAUX 表空间瞬间回收大量空间

无业务影响(该表为系统日志表,无业务写入)

四、风险说明

ALTER TABLE MOVE / INDEX REBUILD 风险

短暂锁表,低峰期执行无感知

空表下执行速度极快(秒级完成)

删除顾问任务风险

无风险,仅清理历史诊断数据

官方推荐清理方案

不要直接删除SYS核心表
不要在业务高峰期执行 DDL

五、根治方案

sql 复制代码
-- 永久关闭自动统计顾问任务(按需配置)
BEGIN
  DBMS_AUTOTASK_ADMIN.MODIFY_CLIENT(
    client_name => 'auto_stats_advisor',
    operation   => NULL,
    window_name => 'MAINTENANCE_WINDOW_GROUP',
    attribute   => 'ENABLED',
    value       => 'FALSE'
  );
END;
/
相关推荐
ACP广源盛13924625673几秒前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#IX6024 PCIe2.0 交换芯片在轻量化 AI 服务中的机会与应用场景
大数据·数据库·人工智能·嵌入式硬件·macos·开源
ly76897 分钟前
深入解析 MySQL 间隙锁:从加锁规则到死锁案例
数据库·mysql·死锁·间隙锁·next-key lock·事务隔离
LRL_7 分钟前
7x24小时不停机:基于 Apache SeaTunnel 实现 Oracle to Oracle 实时 CDC 同步全实战
数据库·oracle·apache
不剪发的Tony老师8 分钟前
Navop:一款工具搞定数据库、SSH、SFTP、远程桌面、AI Agent
运维·数据库·ssh
程序员-Benothing14 分钟前
MySQL 中 DELETE、DROP 和 TRUNCATE 的区别是什么?
数据库·mysql
lhldsg19 分钟前
幼儿托管系统开发实战指南:从需求分析到架构设计全流程解析
数据库·数据仓库·需求分析
2601_9603563828 分钟前
库存分析岗位秋招准备:SQL、Excel、WMS与供应链指标
数据库·sql·excel
山峰哥40 分钟前
造价算量系统SQL优化,慢查询从9秒压到35毫秒‌
大数据·数据库·sql·编辑器·深度优先
AC赳赳老秦1 小时前
电力能源公开数据采集实操:用 OpenClaw 合规抓取电网电价与发电量数据,生成区域能源供需分析报告
大数据·数据库·人工智能·python·php·deepseek·openclaw
Discipline~Hai2 小时前
Linux网络编程05-sqlite3数据库
linux·c语言·网络·数据库·sqlite·linux应用软件编程