首頁 > 軟體

Oracle sysaux表空間異常增長的完美解決方法

2022-04-20 19:00:45

發現問題

某一業務系統資料庫,sysaux表空間大小達到24GB+

查詢sysaux表空間中物件的大小,超過1GB的列出,發現ASH相關的表過大。

 SEGMENT_NAME                   OWNER                SEGMENT_TYPE           MB                                                                                                       
------------------------------ -------------------- ------------------ ------                                                                                                       
WRH$_ACTIVE_SESSION_HISTORY    SYS                  TABLE PARTITION      7151                                                                                                       
WRH$_EVENT_HISTOGRAM_PK        SYS                  INDEX PARTITION      1856                                                                                                       
WRH$_EVENT_HISTOGRAM           SYS                  TABLE PARTITION      1777                                                                                                       
WRH$_LATCH                     SYS                  TABLE PARTITION      1657                                                                                                       
WRH$_SQLSTAT                   SYS                  TABLE PARTITION      1344

檢視快照在資料庫中的保留時長

可以看到,AWR設定的保留時間為8天,WRH$_ACTIVE_SESSION_HISTORY確保留了2140天的資料,需清理。

檢視AWR快照未清理原因

WRH$_ACTIVE_SESSION_HISTORY由於分割區失敗,導致所有資料均在同一個表空間,所以刪除過期快照失敗。

問題原因分析:

Oracle根據保留策略決定需要清除哪些行。在大型AWR表的情況下使用了一種特殊的機制,我們將快照資料儲存在分割區中。從這些表中清除資料的一種方法是刪除只包含超過保留條件的行的分割區。在夜間清除任務中,只有當分割區中的所有資料都已過期時,我們才會刪除該分割區。如果該分割區至少包含一行,根據保留策略,該行不應被刪除,那麼該分割區將不會被刪除,因此該表將包含舊資料。

如果沒有發生分割區拆分(無論出於何種原因),那麼我們最終可能會遇到這樣的情況:我們必須等待最新的條目過期,然後才能刪除它們所在的分割區。這可能意味著,一些較舊的條目可以在有效期過後顯著保留。其結果是資料未按預期清除。

處理方法:

根據MOS:WRH$_ACTIVE_SESSION_HISTORY Does Not Get Purged Based Upon the Retention Policy (Doc ID 387914.1)處理步驟

1.Check the partition details for the offending table before the split:

 SELECT owner,
  segment_name,
  partition_name,
  segment_type,
  bytes/1024/1024/1024 Size_GB
FROM dba_segments
WHERE segment_name='WRH$_ACTIVE_SESSION_HISTORY';

2.Split the partitions so that there is more chance of the smaller partition being purged:

alter session set "_swrf_test_action" = 72;

NOTE: This command will split partitions for ALL partitioned AWR objects. It also initiates a single split; it does not need to be disabled and will need to be repeated if multiple splits are required.

3.Check the partition details for the offending table after the split:

SELECT owner,
  segment_name,
  partition_name,
  segment_type,
  bytes/1024/1024/1024 Size_GB
FROM dba_segments
WHERE segment_name='WRH$_ACTIVE_SESSION_HISTORY';

以上步驟執行完成後,再truncate原來的分割區,只保留新分割區,釋放空間

ALTER TABLE WRH$_ACTIVE_SESSION_HISTORY TRUNCATE PARTITION WRH$_ACTIVE_xxxxx;

檢查索引是否正常

select index_name,partition_name,status from dba_ind_partitions where index_name='WRH$_ACTIVE_SESSION_HISTORY_PK';

總結

到此這篇關於Oracle sysaux表空間異常增長解決的文章就介紹到這了,更多相關Oracle sysaux表空間異常增長內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com