在oracle9i以前的版本中,你只能在啟動數(shù)據(jù)庫的時候控制oracle使用的unix內(nèi)存。oracle提供了一些init.ora參數(shù)來檢測系統(tǒng)全局區(qū)(system global area,sga)的ram大小。一旦啟動了數(shù)據(jù)庫,你將不能再改變sga的大小和配置。
oracle向一個24/7數(shù)據(jù)庫邁進的目標(biāo),提出了調(diào)整unix內(nèi)存區(qū)的大小而不必停止和重啟數(shù)據(jù)庫的要求。更重要的是,oracle9i的動態(tài)sga特性允許你監(jiān)控sga內(nèi)的物理內(nèi)存使用,并根據(jù)現(xiàn)有的oracle數(shù)據(jù)庫的需求調(diào)整sga內(nèi)存區(qū)域。
oracle9i還加入了一項新的內(nèi)存管理技術(shù),使得你能夠為所有的程序全局區(qū)(program global area,pga)預(yù)分配內(nèi)存,并允許oracle按照各類連接的不同需求為各連接分配內(nèi)存。這是對傳統(tǒng)oracle數(shù)據(jù)庫的一項相當(dāng)激進的更改,而且使得sort_area_size和其他pga參數(shù)被廢棄。
不僅要分配sga,oracle9i dba還必須擔(dān)負(fù)為unix oracle服務(wù)器分配所有內(nèi)存的責(zé)任,同時還要為unix的管理需要預(yù)留20%的內(nèi)存。
在oracle9i之前的版本中,同時擁有數(shù)個init.ora參數(shù)文件并不罕見,因為這樣可以方便地調(diào)整數(shù)據(jù)庫并重新配置sga以改變運行模式。比如,為在線事務(wù)處理(online transaction processing,oltp)而分配的sga和oracle數(shù)據(jù)倉庫處理模式的有很大不同。
oracle推薦為oltp數(shù)據(jù)庫和決策支持系統(tǒng)(decision support system,dss)應(yīng)用程序——如oracle數(shù)據(jù)倉庫——使用不同的內(nèi)存配置方案。oltp系統(tǒng)應(yīng)該將unix內(nèi)存的大部分分配給sga,而數(shù)據(jù)倉庫和dss應(yīng)用程序?qū)?nèi)存較為敏感,則應(yīng)分配大部分內(nèi)存給pga連接。
當(dāng)然,如果一個數(shù)據(jù)庫會以兩種方式運作,你可以運行一個腳本來動態(tài)改變內(nèi)存分配。例如,如果一個數(shù)據(jù)庫在白天以oltp模式運行,而在晚上以dss模式運行,那么你可以運行一個腳本從sga中拿些內(nèi)存出來,重新分配到pga區(qū)域。
alter system set sga_memory_max = 3g;
alter system set pga_aggregate_target = 3g;
在oracle9i中,oracle提供了增加或減少sga內(nèi)存以下部分大小的能力:
data buffer size - alter system set db_cache_size=300m;
shared pool size - alter system set shared_pool_size=200m;
total pga ram memory size - alter system set pga_aggregate_target=2000m;
在unix上,oracle通過修改unix內(nèi)存區(qū)的物理地址空間來達(dá)到動態(tài)內(nèi)存分配的目的。你在unix上用malloc()和free()命令就能做到。
新的動態(tài)sga特性使得oracle sga可以以一個較小的容量開始,并根據(jù)需要逐漸增加。為了便利這個過程還提供了一個新的sga_max_size參數(shù)。
新聞熱點
疑難解答
圖片精選