1. 程式人生 > 其它 >sysaux表空間增大的幾種情況及解決辦法

sysaux表空間增大的幾種情況及解決辦法

sysaux表空間會因為多種情況而增大,以下介紹幾種情況及解決辦法


1、由於設定了awr快照基線導致awr無法purge

--檢視sysaux表空間內容佔用情況
SELECT occupant_name "Item",
   space_usage_kbytes / 1048576 "Space Used (GB)",
   schema_name "Schema",
   move_procedure "Move Procedure"
 FROM v$sysaux_occupants
ORDER BY 1 ;
--查詢sysaux表空間排名前20的大段物件
select owner, segment_name, segment_type, bytes / 1024 / 1024
 from (select *
     from dba_segments
    where tablespace_name = 'SYSAUX'
    order by bytes desc)
where rownum < 20;
--檢視awr的保留屬性
select * from dba_hist_wr_control;

--檢視awr的最大、最小快照號
select max(snap_id), min(snap_id) from sys.WRM$_SNAPSHOT;

--檢視資料庫dbid
select dbid from v$database;

--檢視awr相關的基線情況
select * from dba_hist_baseline_details;

--刪除指定的基線
EXECUTE DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name => 'test_baseline');

--清理指定範圍的awr快照
begin
  dbms_workload_repository.drop_snapshot_range(
   low_snap_id => 4217,
   high_snap_id => 4218,
   dbid => 2513064869);
end;
/

2、WRH$_ACTIVE_SESSION_HISTORY表未自動purge
參考MOS:WRH$_ACTIVE_SESSION_HISTORY Does Not Get Purged Based Upon the Retention Policy (文件 ID 387914.1)

--檢查WRH$_ACTIVE_SESSION_HISTORY表的分割槽情況
SELECT owner,
 segment_name,
 partition_name,
 segment_type,
 bytes/1024/1024/1024 Size_GB
FROM dba_segments
WHERE segment_name='WRH$_ACTIVE_SESSION_HISTORY';


--手工為WRH$_ACTIVE_SESSION_HISTORY表進行分割槽,可重複執行
alter session set "_swrf_test_action" = 72;


--檢查WRH$_ACTIVE_SESSION_HISTORY表的分割槽情況
SELECT owner,
 segment_name,
 partition_name,
 segment_type,
 bytes/1024/1024/1024 Size_GB
FROM dba_segments
WHERE segment_name='WRH$_ACTIVE_SESSION_HISTORY';

之後oracle內部呼叫自動清理作業會purge該表的相關分割槽

3、WRH$_SQL_PLAN表未自動purge
參考MOS:How to Purge WRH$_SQL_PLAN Table in AWR Repository, Occupying Large Space in SYSAUX Tablespace. (文件 ID 1478615.1)

方法1:可能無效

--檢視WRH$_SQL_PLAN表總行數
select count(*) from sys.wrh$_sql_plan;

--檢視資料庫dbid
SELECT dbid FROM v$database;

--清理WRH$_SQL_PLAN表(官方文件未記錄該函式)
exec dbms_workload_repository.purge_sql_details(1000, &dbid);

--檢視WRH$_SQL_PLAN表總行數
select count(*) from sys.wrh$_sql_plan;


方法2:

--檢視WRH$_SQL_PLAN表記錄的最小時間戳
select min(TIMESTAMP) from wrh$_sql_plan;

--手工清理WRH$_SQL_PLAN表,刪除dba_hist_snapshot記錄時間戳範圍外的資料(耗時隨資料量增加而延長,注意undo空間使用情況)
delete from wrh$_sql_plan where trunc(TIMESTAMP) < (select min(BEGIN_INTERVAL_TIME) from dba_hist_snapshot);

--檢視WRH$_SQL_PLAN表總行數
select count(*) from sys.wrh$_sql_plan;

4、WRI$_OPTSTAT_TAB_HISTORY表未自動purge
參考MOS:SYSAUX Grows Because Optimizer Stats History is Not Purged (文件 ID 1055547.1)

原因:由於oracle內部自動purge WRI$_OPTSTAT_TAB_HISTORY表的JOB存在5分鐘的視窗限制,因此5分鐘內未清理完成則JOB失敗,該MOS提供的
清理方式未必生效,建議定位到purge WRI$_OPTSTAT_TAB_HISTORY表的sql,手工進行清理

--檢視sysaux表空間內容佔用情況
SELECT occupant_name "Item",
   space_usage_kbytes / 1048576 "Space Used (GB)",
   schema_name "Schema",
   move_procedure "Move Procedure"
 FROM v$sysaux_occupants
ORDER BY 1 ;


--查詢sysaux表空間排名前20的大段物件
select owner, segment_name, segment_type, bytes / 1024 / 1024
 from (select *
     from dba_segments
    where tablespace_name = 'SYSAUX'
    order by bytes desc)
where rownum < 20;


--通過awr、ash排查問題時間段自動purge的sql


--追溯sql的執行計劃,建立合適的索引後,手工執行purge sql


--降低刪除歷史資訊資料表的高水位線,並重建索引

注:move表前,匯出表的所有物件定義(索引、約束、觸發器等),move前、後檢查所有物件的可用狀態是否一致

--檢查I_WRI$_OPTSTAT_IND_OBJ#_ST索引狀態
select status from dba_indexes where index_name='I_WRI$_OPTSTAT_IND_OBJ#_ST';

--匯出索引定義,最好get_ddl和PLSQL的檢視sql定義都匯出
select dbms_metadata.get_ddl('INDEX','I_WRI$_OPTSTAT_TAB_ST','SYS') from dual;

--move WRI$_OPTSTAT_TAB_HISTORY表,降低高水位
alter table WRI$_OPTSTAT_TAB_HISTORY move;

--重建索引
alter index sys.I_WRI$_OPTSTAT_TAB_ST rebuild;

--檢查I_WRI$_OPTSTAT_IND_OBJ#_ST索引狀態
select status from dba_indexes where index_name='I_WRI$_OPTSTAT_IND_OBJ#_ST';

本文來自部落格園,作者:Eddie小陳,轉載請註明原文連結:https://www.cnblogs.com/orachen/p/15878878.html