Oracle9i的實體記憶體管理(轉)

post0發表於2007-08-14
Oracle9i的實體記憶體管理(轉)[@more@]

  在Oracle9i以前的版本中,你只能在啟動資料庫的時候控制Oracle使用的UNIX記憶體。Oracle提供了一些INIT.ORA引數來檢測系統全域性區(system global area,SGA)的RAM大小。一旦啟動了資料庫,你將不能再改變SGA的大小和配置。

  

  

  

  Oracle向一個24/7資料庫邁進的目標,提出了調整UNIX記憶體區的大小而不必停止和重啟資料庫的要求。更重要的是,Oracle9i的動態SGA特性允許你監控SGA內的實體記憶體使用,並根據現有的Oracle資料庫的需求調整SGA記憶體區域。

  

  Oracle9i還加入了一項新的記憶體管理技術,使得你能夠為所有的程式全域性區(program global area,PGA)預分配記憶體,並允許Oracle按照各類連線的不同需求為各連線分配記憶體。這是對傳統Oracle資料庫的一項相當激進的更改,而且使得SORT_AREA_SIZE和其他PGA引數被廢棄。

  

  不僅要分配SGA,Oracle9i DBA還必須擔負為UNIX Oracle伺服器分配所有記憶體的責任,同時還要為UNIX的管理需要預留20%的記憶體。

  

  在Oracle9i之前的版本中,同時擁有數個INIT.ORA引數檔案並不罕見,因為這樣可以方便地調整資料庫並重新配置SGA以改變執行模式。比如,為線上事務處理(online transaction processing,OLTP)而分配的SGA和Oracle資料倉儲處理模式的有很大不同。

  

  Oracle推薦為OLTP資料庫和決策支援系統(decision support system,DSS)應用程式――如Oracle資料倉儲――使用不同的記憶體配置方案。OLTP系統應該將UNIX記憶體的大部分分配給SGA,而資料倉儲和DSS應用程式對記憶體較為敏感,則應分配大部分記憶體給PGA連線。

  

  當然,如果一個資料庫會以兩種方式運作,你可以執行一個指令碼來動態改變記憶體分配。例如,如果一個資料庫在白天以OLTP模式執行,而在晚上以DSS模式執行,那麼你可以執行一個指令碼從SGA中拿些記憶體出來,重新分配到PGA區域。

  

  alter system set sga_memory_max = 3g;

  alter system set pga_aggregate_target = 3g;

  

  在Oracle9i中,Oracle提供了增加或減少SGA記憶體以下部分大小的能力:

  

  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記憶體區的實體地址空間來達到動態記憶體分配的目的。你在UNIX上用malloc()和free()命令就能做到。

  

  新的動態SGA特性使得Oracle SGA可以以一個較小的容量開始,並根據需要逐漸增加。為了便利這個過程還提供了一個新的SGA_MAX_SIZE引數。


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

相關文章