Oracle日常問題處理ORA-04031

chenoracle發表於2020-02-14

Oracle日常問題處理 ORA-04031

 

環境:

DB:Oracle 11.2.0.1.0

OS:Windows Server 2008

問題現象:

資料庫經常當機,重啟後沒過幾天又出現問題。

問題原因:

檢視問題期間告警日誌可知是由ORA-04031 報錯引起資料庫不可用:

ORA-04031: unable to allocate 2968 bytes of shared memory ("shared pool","insert into smon_scn_time (t...","sga heap(2,0)","call")

從對應的trace日誌 中可以看到, " KGH: NO ACCESS " 型別的記憶體佔用了很大的空間。

如下文件解釋了這個問題:

ORA-04031 in 11g & 11gR2, Excess "KGH: NO ACCESS" Memory Allocation ( Doc ID 1127833.1 )

這個型別的記憶體是當共享池和DB Cache 進行切換時的中間狀態的記憶體,如果切換過於頻繁,就會導致這種記憶體累積,並無法正常利用。

相關的Bug 一般在 11.2.0.2 11.2.0.3,11.2.0.4.0 版本修復;

並且從AWR 報告也可以看到, Shared Pool Size Buffer Cache 記憶體高很多,也能推測出可能是 AMM 記憶體自動管理出了問題。


解決方案:

從根本上解決:

1 升級到 11.2.0.4 版本

推薦的補充方案:

2 shared_pool_size db_cache_size 設定一個最小值,減少記憶體自動切換的可能性

可選方案:

3 設定 alter system set "_memory_broker_stat_interval"=999;

強制規定最少999 秒切換一次。

相關文件:

ORA-04031 ORA-04030 經常容易搞混,可以看下面的文章瞭解更多關於 ORA-04031 ORA-04030 錯誤。

ORA-4031 錯誤故障排除與診斷[視訊] (Doc ID 2016002.1)

OERR: ORA-4031 "unable to allocate %s bytes of shared memory ("%s","%s","%s")" (Doc ID 4031.1)

診斷並解決 ORA-4030 錯誤 (Doc ID 1548826.1)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2675635/,如需轉載,請註明出處,否則將追究法律責任。

相關文章