【體系結構問題解決,1】解決4031錯誤方法

三.解決4031錯誤方法:
ora-4031錯誤產生原因:大量的硬解析後,導致鏈上的chunk都變的非常小,此時來了一個大的sql會找不到合適的chunk,就會報ora-4031錯誤。

如果SHARED_POOL_SIZE 設置得足夠大,又可以排除 Bug 的因素,那麼大多數的ORA- 04031 錯誤都是由共享池中的大量的SQL 代碼等導致過多內存碎片引起的。 

1.執行alter system flush shared_pool; 清理library cache 和rows cache ,此方法只能臨時解決問題不推薦使用。
原因:
1 )Flush Shared Pool 會導致當前未使用的cursor 被清除出共享池,如果這些 SQL 隨後需
要執行,那麼數據庫將經歷大量的硬解析,系統將會經歷嚴重的CPU 爭用,數據庫將會產生
激烈的L atch 競爭。 
(2 )如果應用沒有使用綁定變量,大量類似SQL 不停執行,那麼Flush  Shared  Pool 可能
只能帶來短暫的改善,數據庫很快就會回到原來的狀態。 
(3 )如果Shared  Poo l 很大,並且系統非常繁忙,刷新Shared  Pool可能會導致系統掛起,
對於類似系統儘量在系統空閒時進行。 

2.方法二: 讓開發人員修改sql語句,實現共享SQL,
3.方法三:將較大的對象保存到內存中,
4.方法四:設置合適的shared_pool_reserved_size參數,結合shared_pool_reserved_min_alloc 參數可以用
來避免由此導致的性能下降。這個參數的缺省值是shared_pool_size 的5%,通常這個參數的建議值爲shared_pool_size參數的10% ~20% 大小,最大不得超過shared_pool_size的50% 。
保留區是在shared_pool中專門用來緩存大對象區域,所以可以增加保留區的大小。
    #查看請求保留區的錯誤次數,(若過請求保留區錯誤,就會包4031錯誤)
    select REQUEST_MISSES from v$shared_pool_reserved;
  
6.使用AMM自動內存管理來分配共享池,防止共享池設置小而出錯。(一般做到這一步就可以了)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章