程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle9i的物理內存管理

Oracle9i的物理內存管理

編輯:Oracle數據庫基礎

在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參數。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved