WINDOWS平台上扩展SGA (zt)

WINDOWS平台上扩展SGA
针对32bit的Windows。Windows2000上不能利用超过4G的内存,一般是2G的内存保留给进程,2G内存保留给核心的。在Windows2000 Advanced Server上可以分配3G给进程,1G留给核心的。
1. 如果机器的内存在4G以下,可以使用Physical Address Extensions(PAE)或者是Address Windowing Extensions(AWE)进行扩展,如果机器内存大于4GB就只能使用AWE进行扩展了。
AWE支持以下的Windows操作系统:
Windows 2000 Datacenter Server
Windows 2000 Advanced Server
Windows 2003 Datacenter Edition(32bit)
Windows 2003 Enterprise Edition(32bit)
AWE不支持以下的Windows操作系统:
Windows 2000 Server(Standard)
Windows2000 Professional
Windows XP Home Edition
Windows XP Professional
Windows 2003 Standard Edition
Windows 2003 Web Edition
AWE支持的Oracle数据库的版本:
Oracle 8.1.6.X
Oracle 8.1.7.X
Oracle 9.2.X
AWE不支持Oracle9.0.1.X
在标准版的Oracle9.2.0.1上,如果你设置了use_indirect_data_buffers=true,启动就会报错:
ORA-439-feature not enabled:very large memory.
这个是标准版的Oracle的9.2.0.1的一个bug(#2520796),在Oracle9.2.0.2中解决了。
2. 在操作系统上启动AWE
AWE在操作系统上可以通过在boot.ini文件中加/PAE切换启用。
例如:
multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2000 Advanced Server" /PAE
也可以同时使用/PAE和/3G在同一台机器上,例如:
multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2000 Advanced Server" /3GB /PAE
但是同时使用内存最到能够支持到16G,如果用使用16G以上的内存,则必须选择其中的一种使用了。
3. 在Oracle上启用AWE
首先要在启动的参数文件中设置参数
USE_INDIRECT_DATA_BUFFERS=TRUE
如果设置了这个参数,对于Oracle9.2.0的版本则不能再使用DB_CACHE_SIZE参数了,只能使用DB_BLOCK_BUFFERS参数。
扩展的内存只能增加到BUFFER CACHE中去使用,因此只能增大DB_BLOCK_BUFFERS这个参数去扩展SGA区。
4. AWE_WINDOW_MEMORY实现故障解决
在Oracle8.1.7版本以下启动数据库的时候不用设置AWE_WINDOW_MEMORY的最小值,而在Oracle9.2.0的版本中则强制要设置AWE_WINDOW_MEMORY的最小值,这个最小值在Oracle8.1.7中通过DB_BLOCK_LRU_LATCHES参数设定,在Oracle9.2.0中则通过_DB_BLOCK_LRU_LATCHES隐含参数设定,Oracle9.2.0的AWE_WINDOW_MEMORY的最小值由以下的公式计算:
MIN(AWE_WINDOW_MEMORY)=(4096 * DB_BLOCK_SIZE * _DB_BLOCK_LRU_LATCHES)/8
_DB_BLOCK_LRU_LATCHES = (Max buffer pools * SETS_PER_POOL)
Max Buffer Pools是个常量,等于8,SETS_PER_POOL是个变量,它的大小由是否启用VLM(即设定USE_INDIRECT_DATA_BUFFERS=TRUE参数)决定:
SETS_PER_POOL = 2* CPU_COUNT (启用 VLM)
SETS_PER_POOL= CPU Count /2 (不启用VLM)
例如:
CPU's = 16
DB_BLOCK_SIZE = 8192
Total RAM = 16 GB
SETS_PER_POOL = 2 * CPU_COUNT = 32
_DB_BLOCK_LRU_LATCHES = (max buffer Pools * sets_per_pool) = 8*32 = 256 MIN(AWE_WINDOW_MEMORY)=(4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8 =( 4096 * 8192 * 256) / 8 = 1073741824 bytes = 1024 MB
这样在Windows的注册表中的HKLMSoftwareOracleHomex下的AWE_WINDOW_MEMORY值至少是1024M,否则就会提示错误:
ORA-27102 out of memory
OSD-00034 Message 34 not found; Product=RDBMS;facility =SOSD
O/S Error: (OS 8) Not enough storage is available to process this command

========================================


如何讓oracle突破內存的限制
測試環境: CPU: XEON 3.0*4
RAM: 5G Database Version: 9.2.0.4
OS: Windows Server 2003 Enterprise
32bit Windows上不能利用超過4G的內存,一般是2G的內存保留給進程,
2G內存保留給核心。在機器內存大於4GB的情況下,可以使用AWE(Address Windowing Extensions)擴大對內存的使用,但擴展的內存只能增加到data buffer中去使用。
具體設置步驟:
.首先應卸載實例,關閉oracle服務:
C:Documents and SettingsAdministrator>sqlplus /nolog
SQL> conn/as sysdba
Connected
SQL>shutdown immediate;
關閉oracle服務:右擊我的電腦->管理->服務->OracleService->stop;

.在操作系统上启动AWE:
打開我的電腦 -> 資料夾選項 -> 檢視 -> 選擇“顯示所有檔案和資料夾”,不“隱藏保護的作業系統檔案(建議使用)”及不“隱藏已知檔案類型的副檔名”,如圖所示:

打開C盤,找到boot.ini文件並打開,在啟動windows項中添加 /3GB /PAE 參數。修改過後的boot.ini內容:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Windows Server 2003, Enterprise" /3GB /PAE /fastdetect /NoExecute=OptOut

.AWE_WINDOW_MEMORY实现:
  (為便於敘述,將正常情況下應用程式可以使用的3G內存稱作普通內存,而將超過4G的內存稱作擴展内存。)
  AWE_WINDOW_MEMORY參數定義data buffers使用普通內存中多少內存作為緩存的大小。
  AWE_WINDOW_MEMORY有最小值,其最小值由以下的公式计算:
MIN(AWE_WINDOW_MEMORY)=(4096 * DB_BLOCK_SIZE * _DB_BLOCK_LRU_LATCHES)/8
_DB_BLOCK_LRU_LATCHES = (Max buffer pools * SETS_PER_POOL)
Max Buffer Pools(常量)=8,
SETS_PER_POOL是个变量,它的大小由是否启用VLM(即设定USE_INDIRECT_DATA_BUFFERS=TRUE参数)决定:
SETS_PER_POOL = 2* CPU_COUNT (启用 VLM)
SETS_PER_POOL= CPU Count /2 (不启用VLM)
SFCDB521數據庫中各參數如下:
CPU_COUNT = 4
DB_BLOCK_SIZE = 4096
Total RAM = 6GB
SETS_PER_POOL = 2 * CPU_COUNT = 8
_DB_BLOCK_LRU_LATCHES =(Max buffer pools * SETS_PER_POOL)= 8*8 =64 MIN(AWE_WINDOW_MEMORY)=(4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8 =( 4096 * 4096 * 64) / 8 = 134217728 bytes = 128MB
AWE_WINDOW_MEMORY的默認值為1GB,即1073741824字節
綜上所述,在註冊表HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE -> HOME0中添加一個二進制值,名稱為AWE_WINDOW_MEMORY ,值為1073741824。

.1.在參數文件中設置參數:USE_INDIRECT_DATA_BUFFERS=TRUE
2.在參數文件中不能使用DB_CACHE_SIZE參數,改用DB_BLOCK_BUFFERS參數.
設定db_block_buffers大小:
data buffer cache=Total RAM-4GB+AWE_WINDOW_MEMORY=6-4+1=3G
db_block_size=4096
db_block_buffers=786432

.重新開啟數據庫
1. 開啟oracle服務:
 右擊我的電腦 -> 管理 -> 服務 -> OracleService -> start;
2. 加載實例:
C:Documents and SettingsAdministrator>sqlplus /nolog
SQL> conn/as sysdba
Connected
SQL>startup pfile=’xxxxxxx’;

具体修改如下:
1.修改boot.ini 文件內容:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Windows Server 2003, Enterprise" /3GB /PAE /fastdetect /NoExecute=OptOut

2. 修改注册表
运行regedit ,进入到
HKEY_LOCAL_MACHINE -> SOFTWARE -> ORACLE -> HOME0中,新增一個二進制值,名稱為AWE_WINDOW_MEMORY ,值為1073741824;

3.data buffer cache(db_block_buffers * db_block_size=4096)调整到2.8Gb,在oracle配置文件里作以下参数修改:
屏蔽db_cache_size参数
屏蔽sga_max_size参数
添加USE_INDIRECT_DATA_BUFFERS=TRUE
添加db_block_buffers=734003

================================================

针对32bit的Windows,Windows2000上不能利用超过4G的内存,一般是2G的内存保留给进程,2G内存保留给核心的。在Windows2000 Advanced Server上可以分配超过2G的内存给进程。
但是多出来的这部分内存只能给db block buffers,不能给其他如shared pool。

具体原理记得应该是2的32次方为windows的最大寻址空间,也就是4G。但是这4G里,缺省情况下,会分配0G到2G的这个位置给操作系统使用,而其他非操作系统进程只能使用2G到4G这部分内存。即便只有oracle这一个进程,也最多使用2G内存。可以压缩操作系统使用的部分,也就是0G到2G,可以压缩出1个G的内存给非操作系统进程使用。

设置方式如下,这是实际做过的,现在仍然在运行,效果不错:
1) boot.ini 添加 /3GB /PAE
2) init.ora use_indirect_data_buffers=true (and increase DB buffers)
3) HKLMSoftwareOracleHome0下添加字符串:AWE_WINDOW_MEMORY (this was entered as 500000000 for 500MB vs default 1GB)

当然这样做了9i下的db_buffer_cache就没用了,需要设置db_block_buffers。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/756652/viewspace-440343/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/756652/viewspace-440343/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值