1、由于32位系统内存寻址只能到4G,所以在32位系统上使用超过4G的内存,首先要使用支持大内存的软硬件,比如使用至强的CPU(虽然是32位CPU,但是上增加了扩展寻址的能力),windows2003企业版或数据中心版。
2、在操作系统中启用PAE(Physical Address Extensions )功能,这样oracle便可以通过windows的AWE(Address Windowing Extensions)API使用多余4G的内存。
方法:打开系统根目录下的隐藏文件 Boot.ini ,添加 PAE 开关:
(1)multi(0)disk(0)rdisk(0)partition(2)\%systemroot%="Windows Server 2003, Datacenter Edition" /PAE
(2)multi(0)disk(0)rdisk(0)partition(2)\%systemroot%="Windows Server 2003, Datacenter Edition" /3GB /PAE
我们知道32位windows对于每个进程都分配4GB内存(虚拟内存),其中起始的2GB归windows核心使用,剩余的归应用程序本身使用。因此这两种方法的区别就在于:
方法一只使用了/PAE开关表示启用/PAE功能但是系统对每个进程仍然采用2G核心、2G应用程序的内存分配方式。
方法二除了/PAE开关还使用了/3GB开关表示不仅启用/PAE功能并且系统对每个进程采用1G核心、3G应用程序的内存分配方式。不过这种方式不支持大于16GB的内存,也就是说如果你的实际内存超过16GB则只能使用方法一,这是因为大于16GB后1G的核心内存已经不够windows实现PAE功能。
3、给运行Oracle数据库的操作系统帐户,授予"Lock Pages in Memory"的系统权限。
执行 gpedit.msc打开“组策略”控制台
“计算机配置”->“Windows 设置”->“安全设置”->“本地策略”->“用户权利指派”
双击右边“锁定内存中的页”(或名为"内存中锁定页"),在“本地安全策略设置”对话框中,单击“添加”按钮,在“选择用户或组”对话框中,添加有权运行 oracle的帐户。
4、配置oracle数据库的参数文件(init*.ora),添加USE_INDIRECT_DATA_BUFFERS=TRUE参数,表示使用扩展的内存。
5、修改注册表中的AWE_WINDOW_MEMORY键值为合适值。该值表示在3GB内存中(如果使用了/3GB开关,如果没有使用该开关则为2GB)有多少用于数据库块缓存。
注意:
(1)该值位置在HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0为二进制类型,单位为bytes。
(2)如果不存在表示使用默认值1GB。
(3)该值太大或太小都有可能导致数据库无法启动。
这里解释一下:尽管我们现在拥有超过4GB的内存,但是这些多余的内存并不是oracle可以随便使用的,这些内存只能用于数据库块缓存(即db_buffer),而像share Pool,log buffer等只能保存在应用程序可访问的3GB内存中(如果使用了/3GB开关,如果没有使用该开关则为2GB)。在这里我将4GB以外内存中的数据库块缓存叫做AWE数据块缓存(自己起的名字:-))。这里又有问题了,oracle缓冲的数据块并不能全部保存到4GB以外的内存中,还必须在应用程序可直接访问的3GB内存(如果使用了/3GB开关,如果没有使用该开关则为2GB)中使用一部分空间来保存,这一部分内存我称为直接数据块缓存(自己起的名字:-))。也就是说“数据块缓存=AWE数据块缓存+直接数据块缓存”,为什么会这样呢,因为oracle缓冲到内存中的每个数据块的头部必须保存到“直接数据块缓存”中,是不能够保存到“AWE数据块缓存”中的,并且每个数据块的大小(db_block_size)和数据块的多少(db_block_buffers)都会影响到头部占用空间的多少。并且访问“直接数据块缓存”要比“AWE数据块缓存” 快,因此AWE_WINDOW_MEMORY一般来讲需要设置的尽量大(但不能无限大,比如必须小于3GB),oracle建议以默认值为基础,以20%递增扩大,进行测试。比如先测试1GB大小,在测试1.2GB大小等等。
一般来讲AWE_WINDOW_MEMORY有一个最小公式
min(AWE_WINDOW_MEMORY)=(4096 * db_block_size * db_block_lru_latches)/8
其中:
max buffer pools是一个常量=8
sets_per_tool=2*cpu_count (use_indirect_data_buffers=true)
sets_per_tool=cpu_count/2 (use_indirect_data_buffers<>true)
很多朋友都装了4G内存甚至8G内存,可惜32位系统中除了2003server支持显示4G内存以外,其它都最大利用到3.25G左右,余下0.75G都浪费了,这主要是32位操作系统内存地址映射**的问题造成的,如何解决呢?电脑属性里显示3.25G的问题是无法真正解决的,即使32位vista旗舰版可以显示4G内存,但无法真正全部利用这4G内存,这就需要一个重要软件的登场了,RAMDISK,可能很多朋友听说过,此软件支持把内存当硬盘分区来用,也就是说通过RAMDisk可以把无法利用的那部分内存当硬盘分区,除了可以把IE的临时文件缓冲区放到这个分区以提高访问网络的速度外(具体设置很简单这里就不多说了),还可以通过设置windows xp等32位的虚拟内存来把这部分内存真正利用起来,具体设置如下,以8G系统物理内存为例,系统显示3.25G,余下4.75无法利用,这时用RAMDISK把4.75G内存全部设置为硬盘分区,把IE缓冲设置100兆并放到此分区内,此时还余下4.65G,在“我的电脑”-“属性”里把虚拟内存设置为4.65G,然后将虚拟内存页面文件指向这个新设立的分区,保存重启后,你的新分区就会多了一个4.65G的Pagefile.sys的隐藏文件,这时你要把C盘(系统盘)下的Pagefile.sys文件删除(WINDOWS 不会自动删除这个文件),这样你可以利用7.9G的内存了(有100M是你的IE缓冲),4.65G的虚拟内存因为也是映射到真正的内存上来用,所以不会影响速度(速度是原硬盘虚拟内存的十几到几十倍,因物理内存速度而异),但此分区内不能存储重要文件,因为每次关机或重启都会清空此分区,因为此分区不是harddisk而是ram,每次启动系统都会自动生成Pagefile.sys和IE缓冲的目录,我已验证,对系统使用没有任何副作用,至今没有跳出过任何出错的信息。虽然我的电脑属性里依旧是3.25G,但用热键调出的“任务管理器”下的“性能”页面里内存显示的可是7.9G,是真正可以被利用的。
另一种方法:
1,我的电脑-属性-高级-启动和故障恢复-设置-编辑,这里编辑操作的是 c盘根目录下隐藏的boot.ini文件,各位也可以通过在c盘显示隐藏文件的方法 找到它,
我的boot.ini里的内容如下:
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP
Professional" /noexecute=optin /fastdetect "
那么接下来在“multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft
Windows XP Professional" /noexecute=optin /fastdetect”的表明操作系
统的“Microsoft Windows XP Professional ”加上“/PAE”
即“multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows
XP Professional" /PAE /noexecute=optin /fastdetect”
这样保存关闭,系统就打开了PAE
重新启动后,电脑属性的下方多了“物理地址扩展”几个字,虽然显示 , 的还是3.25g内存,但实际上4g内存已经完全启用了,但怎么证明这一点呢?
就用ramdisk虚拟硬盘软件来测试
ramdisk是一款将内存转换为虚拟硬盘的小软件,内存的速度是硬盘的几十倍 ,所以在我处理ps等需要大量暂存盘的软件时,通常都会用它来充当软件的暂 存盘,这样软件的速度会倍增,在系统没有开启PAE只能识别3.25g内存的情况下,使用ramdisk会直接占用这3.25g的内存,而开启PAE后,用ramdisk设置768mb的内存作为虚拟硬盘,再调出任务管理器,会发现内存使用丝毫没有减少,也就是说,ramdisk调用的768mb内存是系统没有显示出来的768mb,还而言之,系统已经找到了4g内存啦。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!