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