11g中的"_memory_imm_mode_without_autosga"引數

talio發表於2014-04-22

在oracle 11g之前的版本中,當SGA_TARGET引數被設定為0時,則意味著自動記憶體調整特性被關閉了.但在11g資料庫中,我們可能還是會看到最初設定的shared_pool_size,db_cache_size等引數的大小發生了變化,即便是oracle的自動記憶體特性已經被關閉了. 調查該現象的原因可發現這是由11g中新增的隱含引數”_memory_imm_mode_without_autosga”來控制的.

這實際上是11g的一個new feature,是用來規避ORA-4031錯誤的,當資料庫系統由於shared pool(large pool..)中的記憶體被耗盡而將產生ORA-4031錯誤時,即使沒有使用自動記憶體管理的特性, 資料庫也會透過縮小buffer cache的記憶體,然後擴充套件shared pool記憶體的大小,從而避免發生ORA-4031錯誤. 當將引數”_memory_imm_mode_without_autosga”設定為FALSE時,可以關閉該特性,但資料庫仍然會像以前一樣受到ORA-4031錯誤的威脅. 注意,從實際使用中的觀察結果看來,這種記憶體調整是不可逆的,就是說當shared pool存在大量空閒記憶體時並不會釋放上次從buffer cache'借用'的記憶體.

個人經驗: 這種方式雖然可以規避ora-04031錯誤,但這種解決方案是治標不治本的,解決ora-04031錯誤的根本手段還是找出引起這種記憶體消耗的根本原因,從而有針對性的解決. 此外,放任這種自動記憶體調整特性,可能會帶來一些意想不到的結果,比如某些池被擴充套件得過大。所以個人還是比較傾向於關閉該新特性。

以下語句可用於幫助診斷是否發生了自動記憶體調整:

select COMPONENT,CURRENT_SIZE/1024/1024,MIN_SIZE/1024/1024,MAX_SIZE/1024/1024,LAST_OPER_TYPE from v$memory_dynamic_components where LAST_OPER_TYPE in ('GROW','SHRINK');
COMPONENT                      CURRENT_SIZE/1024/1024 MIN_SIZE/1024/1024 MAX_SIZE/1024/1024 LAST_OPER_TYP
------------------------------ ---------------------- ------------------ ------------------ -------------
shared pool                                      6528               6144               6528 GROW
DEFAULT buffer cache                            13952              13952              14336 SHRINK

而以下語句可以顯示歷次resize操作更詳細的細節,如時間,大小等:

SELECT component,oper_type,initial_size/1024/1024 init_MB,target_size/1024/1024 target_MB,final_size/1024/1024 final_MB,status, start_time, end_time
FROM V$SGA_RESIZE_OPS
where PARAMETER in ('db_cache_size','shared_pool_size') and OPER_TYPE in ('GROW','SHRINK')
order by PARAMETER,START_TIME;
COMPONENT                      OPER_TYPE        INIT_MB  TARGET_MB   FINAL_MB STATUS    START_TIME        END_TIME
------------------------------ ------------- ---------- ---------- ---------- --------- ----------------- -----------------
DEFAULT buffer cache           SHRINK             14336      14272      14272 COMPLETE  20140331 04:44:39 20140331 04:44:39
DEFAULT buffer cache           SHRINK             14272      14208      14208 COMPLETE  20140403 13:27:31 20140403 13:27:31
DEFAULT buffer cache           SHRINK             14208      14144      14144 COMPLETE  20140409 06:35:29 20140409 06:35:29
DEFAULT buffer cache           SHRINK             14144      14080      14080 COMPLETE  20140409 06:43:43 20140409 06:43:43
DEFAULT buffer cache           SHRINK             14080      14016      14016 COMPLETE  20140409 06:51:44 20140409 06:51:44
DEFAULT buffer cache           SHRINK             14016      13952      13952 COMPLETE  20140409 06:53:34 20140409 06:53:34
shared pool                    GROW                6144       6208       6208 COMPLETE  20140331 04:44:39 20140331 04:44:39
shared pool                    GROW                6208       6272       6272 COMPLETE  20140403 13:27:31 20140403 13:27:31
shared pool                    GROW                6272       6336       6336 COMPLETE  20140409 06:35:29 20140409 06:35:29
shared pool                    GROW                6336       6400       6400 COMPLETE  20140409 06:43:43 20140409 06:43:43
shared pool                    GROW                6400       6464       6464 COMPLETE  20140409 06:51:44 20140409 06:51:44
shared pool                    GROW                6464       6528       6528 COMPLETE  20140409 06:53:34 20140409 06:53:34
12 rows selected.

其實這裡的時間點是重要的資訊,可幫助我們找到什麼時間發生了記憶體緊張的狀況,從而找出惹禍的應用或語句。

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

相關文章