SHARED POOL的優化思路

     SHARED POOL作爲一塊共享內存區域是SGA的重要組件之一,所以對其優化是有必要的而且是必須的。下面主要是介紹SHARED POOL的優化思路,SGA的組成結構以及每個結構的包括的內容及其作用不做介紹:

 

1.確保shared pool的大小足夠:

    隨着新版本的推出,存放在oracle中的組件越來越多,對shared pool的要求也就越來越高。如果數據庫升級,建議適當的擴大shared pool。當shared pool內存不夠的時候,相關的組件會因爲內存不足而產生爭用,而且如果shared pool內存緊張,還可能導致cursor失效或者頻繁的被交換出shared pool,可以使用dbms_shared_pool.keep將重要的cursor保存在shared pool中。

 

2.使用sub pool:

    從Oracle9i開始,Oracle推出了sub pool技術,即在shared pool中分出多個子池,每個子池獨立的擁有shared pool latch。從理論上來說sub pool技術提高了shared pool的併發能力,但是sub pool相當於分割成了幾個內存片,服務器進程在其中一個sub pool中分配不到內存的時候,不會無限制的去另外的sub pool中去尋找空閒的內存,所以sub pool技術增大了ora-04031的錯誤發生概率。

 

3.對於shared pool,夠用就行:

   如果shared pool過大,oracle就會儘可能的利用shared pool中的內存,當其搜索cursor時的效率會大大降低,搜索期間會持有各類的mutex和latch,從而導致數據庫的性能下降。所以也需要注意在自動內存管理的情況下,shared pool過度擴張的情況。

 

4.注意內存碎片:

   當shared pool中出現內存碎片的時候,不能貿然的flush shared pool,嚴重的時候會hang住整個實例。不要對對象進行頻繁的DDL、賦權、收集統計信息等操作,這些操作會使shared pool中相關的cursor失效,cursor無效則會加劇row cache和library cache爭用,降低數據庫的性能。

 

5.儘可能的使用軟解析:

   shared pool上的性能問題很大程度上是由併發引起的,當發生大量的硬解析的時候,最好能夠從應用層修改代碼,如果應用程序無法修改,則建議設置cursor_sharing參數爲force(設置爲similar可能存在較多的bug,需要注意),並根據應用設置session_cached_cursors和open_cursors參數。

 

6.注意綁定變量窺視:

   如果sql中的選擇謂詞存在柱狀圖,其上有有綁定變量,那麼就需要注意綁定變量窺視的問題了。綁定變量窺視容易引起執行計劃不穩定。在rac系統中,可能會導致節點之間sql執行計劃不同的情況。

 

7.注意sql高版本:

   高版本的sql會導致服務器進程搜索handle的時間變長,從而加大了library cache latch的爭用的概率。oracle bug 往往會導致sql的版本莫名的升高。

 

8.不要收集無意義的柱狀圖:

   如果sql的執行計劃穩定,那麼收集過多的柱狀圖反而會增加row cache的壓力,嚴重時會引起row cache objects latch爭用。

 

9.注意Oracle bug:

   由於Oracle不斷的往shared pool中引入新特性,新特性往往會帶來新的bug,當shared pool出現莫名的性能問題時,需要檢查是否是由bug引起的。

 

 

 

 

注:摘錄自《DBA實戰攻略》

 

    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章