Oracle 10g系統(tǒng)管理:自動SGA內(nèi)存管理
在Oracle 10g系統(tǒng)管理中,有一個自動SGA內(nèi)存管理(ASMM)。下面介紹一下這個功能:
要使用自動管理,需要設(shè)置參數(shù)SGA_TARGET、STATISTICS_LEVEL(=TYPICAL或ALL,因為不支持統(tǒng)計集合,數(shù)據(jù)庫就沒有必要的歷史信息來確定大?。T贠racle9i及以前版本中,只能用手動SGA內(nèi)存管理,不存在參數(shù)SGA_TARGET,而且參數(shù) SGA_MAX_SIZE只是一個上限,而不是動態(tài)目標,但10G中時SGA_TARGET設(shè)置不能超過它。
在Oracle 10g中,與內(nèi)存相關(guān)的參數(shù)可以歸為兩類:
◆自動調(diào)優(yōu)的SGA參數(shù):目前這些參數(shù)包括DB_CACHE_SIZE、SHARED_POOL_SIZE、LARGE_POOL_SIZE和JAVA_POOL_SIZE。
◆手動SGA參數(shù):這些參數(shù)包括LOG_BUFFER、STREAMS_POOL、DB_NK_CACHE_SIZE、DB_KEEP_CACHE_SIZE和DB_RECYCLE_CACHE_SIZE。
在Oracle 10g中,任何時候你都能查詢V$SGAINFO,來查看SGA的哪些組件的大小可以調(diào)整。(Oracle 10g系統(tǒng)管理相比之前的版本是大大增強了)
采用自動SGA內(nèi)存管理時,確定自動調(diào)整組件大小的主要參數(shù)是SGA_TARGET,這個參數(shù)可以在數(shù)據(jù)庫啟動并運行時動態(tài)調(diào)整,***可以達到SGA_MAX_SIZE參數(shù)設(shè)置的值(默認等于SGA_TARGET,所以如果想增加SGA_TARGET,就必須在啟動數(shù)據(jù)庫實例之前先把SGA_MAX_SIZE設(shè)置得大一些)。數(shù)據(jù)庫會使用SGA_TARGET值,再減去其他手動設(shè)置組件的大小(如DB_KEEP_CACHE_SIZE、DB_RECYCLE_CACHE_SIZE等),并使用計算得到的內(nèi)存量來設(shè)置默認緩沖區(qū)池、共享池、大池和Java池的大小。在運行時,實例會根據(jù)需要動態(tài)地對這4個內(nèi)存區(qū)分配和撤銷內(nèi)存。
隨著時間的推移,當實例的內(nèi)存需求越來越確定時,各個SGA組件的大小也越來越固定。即便數(shù)據(jù)庫關(guān)閉后又啟動,數(shù)據(jù)庫還能記得組件的大小,因此不必每次都從頭再來確定實例的正確大小。這是通過4個帶雙下劃線的參數(shù)做到的:__DB_CACHE_SIZE、__JAVA_POOL_SIZE、__LARGE_POOL_SIZE和__SHARED_POOL_SIZE。如果正?;蛄⒓搓P(guān)閉數(shù)據(jù)庫,則數(shù)據(jù)庫會把這些值記錄到存儲參數(shù)文件(SPFILE)中,并在啟動時再使用這些值來設(shè)置各個區(qū)的默認大小。
另外,如果知道4個區(qū)中某個區(qū)的最小值,那么除了設(shè)置SGA_TARGET外,還可以設(shè)置這個參數(shù)。實例會使用你的設(shè)置作為下界(即這個區(qū)可能的最小大?。?,但是重要的一點要記住,這樣Oracle就不能縮小相應(yīng)區(qū)的大小到設(shè)定的最小值以下了。
以上就對Oracle 10g系統(tǒng)管理中的自動SGA內(nèi)存管理功能進行了簡單的介紹。
【編輯推薦】