`
iihero
  • 浏览: 257779 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

突破Oracle for win2k的2G内存限制

阅读更多

....众所周知,在32位的操作系统如win2K上,操作系统能管理的内存为4GB(power(2,32) =<chmetcnv w:st="on" unitname="g" sourcevalue="4" hasspace="False" negative="False" numbertype="1" tcsc="0">4G</chmetcnv>) oracle使用的总内存有<chmetcnv w:st="on" unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">2G</span></chmetcnv>限制。目前大多数信息系统都能为数据库服务器配上<chmetcnv w:st="on" unitname="g" sourcevalue="4" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">4G</span></chmetcnv>物理内存甚至更多,但无论你为系统配置多大的物理内存,正常情况下都不能使oracle使用超过<chmetcnv w:st="on" unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">2G</span></chmetcnv>的内存(包含SGAPGA),从而造成系统资源浪费。那么,有没有什么办法能使运行在windows系统上的oracle使用超过<chmetcnv w:st="on" unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">2G</span></chmetcnv>的内存呢?windows 提供了一种叫4GT(<chmetcnv w:st="on" unitname="g" sourcevalue="4" hasspace="False" negative="False" numbertype="1" tcsc="0">4G</chmetcnv> Tuning)的技术,使得oracle使用超过<chmetcnv w:st="on" unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">2G</span></chmetcnv>(不超过<chmetcnv w:st="on" unitname="g" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">3G</span></chmetcnv>)的内存成为可能。而为了让应用程序使用更大的内存,还有一种PSE36的技术,可以让oracle使用超过<chmetcnv w:st="on" unitname="g" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">3G</span></chmetcnv>的内存。这里,只对我们使用4GT特性让oracle使用超过<chmetcnv w:st="on" unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">2G</span></chmetcnv>的内存进行讨论。

使用4GT特性的基本要求:
....
尽管可以在不超过<chmetcnv w:st="on" unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">2G</span></chmetcnv>物理内存的系统上使用4GT特性,但oracle并不推荐这种做法,因为这将会严重降低系统性能。以我的经验来讲,如果系统未安装<chmetcnv w:st="on" unitname="g" sourcevalue="4" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">4G</span></chmetcnv>物理内存,最好也不要使用这种方法来让oracle使用更多的内存。此外,在需要你的oracle使用超过<chmetcnv w:st="on" unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">2G</span></chmetcnv>的内存时,数据库服务器最好不要再运行其他的服务,以减小系统的压力,让oracle工作得更好。
....
另外,据MS的文档,4GT只能用于 Advanced Server , Datacenter版本上,Server 版以及 Professional 版不能使用4GT特性(实际上是不是也没有必要?<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 15pt; HEIGHT: 15pt" type="#_x0000_t75" alt="大笑"><imagedata o:href="http://www.itpub.net/images/smilies/29.gif" src="file:///C:%5CDOCUME~1%5Chexiong%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.gif"></imagedata></shape>)

为什么4GT能让应用程序使用超过<chmetcnv w:st="on" unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">2G</span></chmetcnv>的内存
....
在正常情况下,windows系统对内存的分配是这样的:在内存地址0x00000000 0x7FFFFFFF之间的空间,交给应用程序使用,操作系统内核及其支持则使用内存地址 0x80000000 0xFFFFFFFF之间的空间。在使用4GT之后,操作系统将内核及其支持程序使用的内存地址空间压缩到 0xC0000000 0xFFFFFFFF之间,从而为应用程序出来<chmetcnv w:st="on" unitname="g" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">1G</span></chmetcnv>的空间。但是,仅仅出来了这<chmetcnv w:st="on" unitname="g" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">1G</span></chmetcnv>的空间还是不够的,还需要指定哪一个应用程序来使用这多出来的”<chmetcnv w:st="on" unitname="g" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1G</chmetcnv>空间,以及如何分配份额等。后面将结合具体的参数设置来讨论。为便于讨论,我们将正常情况下应用程序可以使用的<chmetcnv w:st="on" unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">2G</span></chmetcnv>内存(即地址在 0x00000000 0x7FFFFFFF 之间的内存)称作普通内存,而将windows “出来的<chmetcnv w:st="on" unitname="g" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">1G</span></chmetcnv>内存(地址在 0x80000000 0xBFFFFFFF之间)称作间接内存。

oracle使用超过<chmetcnv w:st="on" unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">2G</span></chmetcnv>内存,不超过<chmetcnv w:st="on" unitname="g" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">3G</span></chmetcnv>内存的具体设置步骤:
1
首先应卸载实例,关闭oracle服务。
2
打开操作系统<chmetcnv w:st="on" unitname="g" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">3G</span></chmetcnv>开关:
....
修改boot.ini文件,在启动windows项中添加 /<chmetcnv w:st="on" unitname="g" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0">3G</chmetcnv>参数。修改过后的boot.ini文件应该类似以下内容:

[boot loader]
timeout=8
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /<chmetcnv w:st="on" unitname="g" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0">3G</chmetcnv> /fastdetect

注意在启动win2K AdvServer的一栏里,多了一个 /<chmetcnv w:st="on" unitname="g" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0">3G</chmetcnv>参数。这个参数的作用,就是让windows启动时,将自己的内核及支持程序装载到内存地址 0xC0000000 0xFFFFFFFF 之间,给应用程序留出<chmetcnv w:st="on" unitname="g" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">3G</span></chmetcnv>的空间来。

3
修改oralce init.ora 文件
..1)
确定oracle的缓冲区及共享池大小,假设作如下定义:
........ db_block_size = 4096
........ db_block_buffers = 262144 #
缓冲区大小为<chmetcnv w:st="on" unitname="g" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">1G</span></chmetcnv>
........ share_pool_size = 314572800 # 使用<chmetcnv w:st="on" unitname="m" sourcevalue="300" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">300M</span></chmetcnv>共享池
..2)
添加下列各项内容:
........ use_indirect_data_buffers = true
........ #
告诉oracle可以使用间接内存(即可以使用windows让出来的<chmetcnv w:st="on" unitname="g" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">1G</span></chmetcnv>内存作为数据缓冲区)
........ pre_page_sga = true
........ #
oracle SGA锁定到内存中,不产生页面交换文件(8i的参数可能是lock_sga = true)
........ #
对于一个有<chmetcnv w:st="on" unitname="g" sourcevalue="4" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">4G</span></chmetcnv>物理内存的系统来讲,可能这一个参数并不是必须的

4
修改注册表,定义oracleDBbuffer使用常规内存大小
....
在注册表 \Hkey_Local_Machine\software\oracle\home0 中添加一个二进制值,名称为AWE_WINDOW_MEMORY ,值的单位为字节,大小为你需要让oracle使用普通内存作为缓存的大小(不是windows让出来的<chmetcnv w:st="on" unitname="g" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">1G</span></chmetcnv>,而是内存地址在0x00000000 0x7FFFFFFF 之间的内存大小)。假如设为209715200,即<chmetcnv w:st="on" unitname="m" sourcevalue="200" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">200M</span></chmetcnv>大小,那么oracle的数据缓冲区将占用<chmetcnv w:st="on" unitname="m" sourcevalue="200" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">200M</span></chmetcnv>的普通内存,其余部分(<chmetcnv w:st="on" unitname="g" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0">1G</chmetcnv> - <chmetcnv w:st="on" unitname="m" sourcevalue="200" hasspace="False" negative="False" numbertype="1" tcsc="0">200M</chmetcnv> = <chmetcnv w:st="on" unitname="m" sourcevalue="824" hasspace="False" negative="False" numbertype="1" tcsc="0">824M</chmetcnv>)则使用间接内存。

5
重新启动操作系统,启动数据库。OK,你现在的 oracle 可以使用<chmetcnv w:st="on" unitname="g" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">2G</span></chmetcnv> + <chmetcnv w:st="on" unitname="m" sourcevalue="824" hasspace="False" negative="False" numbertype="1" tcsc="0">824M</chmetcnv>内存了。

几个补充讨论
1 windows
系统出来的<chmetcnv w:st="on" unitname="g" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">1G</span></chmetcnv>间接内存,只能用于数据缓冲区
....
4GT特性测试中发现,间接内存只能用于数据缓冲区,而不能用于共享池,也不能分配给用户作为PGA。或许有其他的参数可以定义,但我查到的文献中没有任何一篇讲间接内存可以用于哪些地方,而在我们的测试中发现按上面的修改后,间接内存只能用于数据缓冲区。此结论只作为一个经验,不是定论,请各位大侠补充修正。

2
注册表中 AWE_WINDOW_MEMORY 参数大小的定义
....
这个参数定义缓冲池使用普通内存的大小,不能太小。在数据块大小为4K,缓冲池为<chmetcnv w:st="on" unitname="g" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">1G</span></chmetcnv>(即使用262144个块作缓冲池)大小的情况下,此参数定义为<chmetcnv w:st="on" unitname="m" sourcevalue="100" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">100M</span></chmetcnv>时,oracle不能启动,定义为<chmetcnv w:st="on" unitname="m" sourcevalue="200" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">200M</span></chmetcnv>时正常启动。根据我阅读文献后对这个情况的理解,数据缓冲区的每一个块的块头信息都将存放于普通内存中,不能存放于间接内存中。如果此参数定义过小,导致缓冲区块头信息都不能存放,则可导致数据库启动失败。那么,是不是同样大小的缓冲区,数据库块越大,则这个参数就可以定义得越小,因而可以占用更少的普通内存呢?有待验证。
....
在具体的应用中,如何定义此参数,应综合考虑最大并发连接数(专用服务器模式下)、用户重用的堆栈大小、排序区、共享池、大池等内存参数的设置情况,尽可能的将数据缓冲区放到间接内存中,充分利用系统的资源。

3
间接内存的性能
....
oracle的文献讲,间接内存的性能(我想主要是指速度和效率吧?)不如直接内存,绝不推荐在未安装有<chmetcnv w:st="on" unitname="g" sourcevalue="4" hasspace="False" negative="False" numbertype="1" tcsc="0"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">4G</span></chmetcnv>物理内存的系统上使用4GT特性。我不知道如何比较间接内存与直接内存的速度和效率,因而未作测试,姑且信之。

....
一点小结,期望能对大家有所启发。还请各位大侠补充指正。

以上内容的测试环境:
IBM X360 +<chmetcnv w:st="on" unitname="g" sourcevalue="4" hasspace="False" negative="False" numbertype="1" tcsc="0">4G</chmetcnv>
内存 + RAID 5阵列
Windows 2000 Advaced Server SP3 + oracle <chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">8.1.6</chsdate>
专用服务器模式

分享到:
评论

相关推荐

    突破oracle for win2K的2G内存限制

    如何突破Oracle 在32 bit windows环境下的1.7G限制? OS:windows2003 server (entprise) DBMS:oracle 8.17 RAM:4GB 当我把SGA设置为1.56G的情况下,Oracle.exe进程占用的内存达到1.6G时,Oracle的客户端就无法再连...

    如何突破32bitoracle使用2GB内存的限制.pdf

    【标题】: "如何突破32bit Oracle使用2GB内存的限制" 【描述】: "本文探讨了如何利用4GT RAM Tuning特性,突破Oracle在32位系统上内存使用2GB的限制,以提高配置有2GB以上内存的数据库系统的整体性能。" 在32位...

    Oracle Application1155 Installation for Win2k

    ### Oracle Application 11.5.5 在 Windows 2000 上的安装与补丁应用 #### 一、操作系统及相关软件配置 在进行Oracle Application 11.5.5的安装之前,需要确保系统环境已经正确配置。文档中提到了以下几个关键组件...

    kmod-oracle for linux7.zip

    本文将详细讲解在CENTOS 7环境下,如何安装和使用kmod-oracle for linux7这个关键的第三方安装包,以支持Oracle ASM的运行。 首先,理解Oracle ASM的核心功能。Oracle ASM主要负责管理磁盘组,自动进行磁盘故障检测...

    Oracle10.1.0.2在Win2k环境下的RAC安装

    ### Oracle10.1.0.2在Win2k环境下的RAC安装——基于VMWare虚拟技术 #### 一、项目背景与目标 本实验旨在通过使用VMWare虚拟化技术,在一个普通PC机上构建一个双节点Oracle RAC (Real Application Clusters)集群...

    Oracle启用大页内存.docx

    Oracle启用大页内存是针对Oracle数据库性能优化的一种技术,尤其在Oracle 19c版本中,它可以显著提高数据库系统的性能,因为大页内存(Huge Pages)减少了内存管理的开销,提供了更连续的内存分配,从而提高了内存...

    减少Oracle内存占用

    在Windows XP环境下运行Oracle 10g时,由于操作系统本身的限制以及Oracle配置不当,可能会导致Oracle占用过多内存,具体表现如下: 1. **系统资源限制**:Windows XP作为较早的操作系统版本,其对大内存的支持有限...

    Oracle Data Provider for .NET (ODP.NET)

    Oracle 10g 第 2 版 ODAC 和 Oracle Developer Tools for Visual Studio .NET 下载文件 ODTwithODAC1020221.exe 235 MB(247,296,458 字节) ODAC 安装说明 Oracle Developer Tools For Visual ...

    oracle11G调整物理内存提示ORA-00845 MEMORY_TARGET

    * MEMORY_MAX_TARGET:设置 Oracle 实例的最大内存大小,以便限制 Oracle 的内存使用。 * SGA_TARGET:设置 Oracle 实例的 SGA(System Global Area)的目标大小,以便 Oracle 自动地管理 SGA 的大小。 这三个参数...

    ORACLE自动内存管理和存储调整

    ORACLE 自动内存管理和存储调整 ORACLE 自动内存管理和存储调整是 ORACLE 数据库中的一种重要配置,它可以根据系统的实际情况自动调整内存和存储的使用,以提高数据库的性能和效率。本文将详细介绍 ORACLE 自动内存...

    SQL SERVER 安装ORACLE provider for OLE DB 的连接服务驱动

    本文将详细介绍如何在SQL Server上安装Oracle Provider for OLE DB驱动,以便创建与Oracle数据库的连接服务器。 首先,Oracle Provider for OLE DB是一种数据提供程序,它允许SQL Server或其他支持OLE DB的应用程序...

    Oracle内存分配与调整--大牛冯春培的一篇文章

    ### Oracle内存分配与调整——详解冯春培的文章 #### 一、引言 在Oracle数据库管理系统中,内存管理是一项至关重要的任务。不合理的内存配置可能导致性能下降甚至系统故障。冯春培作为一位经验丰富的Oracle专家,...

    toad for oracle 11.6 64bit 注册码 for oracle license key

    在探讨Toad for Oracle 11.6 64位版本及其注册码的相关知识点时,首先需要明确几个关键概念:Toad for Oracle是一款由Quest Software开发的数据库管理工具,广泛应用于Oracle数据库的开发、管理和维护工作中。...

    oracle for linux(11g&amp;12c;)

    Oracle for Linux(11g&12c) 本文档主要介绍了Oracle 11g和12c在Linux上的安装过程,并提供了详细的安装步骤和依赖包安装方法。 一、安装依赖包 在安装 Oracle 之前,需要安装一些依赖包。这些依赖包包括 ...

    Oracle9i在Win2k环境下的完全卸载

    Oracle数据库是全球广泛使用的数据库管理系统,Oracle9i是其9.0版本,它在Windows 2000(Win2k)操作系统上有着广泛的部署。然而,当不再需要Oracle9i或者需要升级到更高版本时,正确地卸载就显得至关重要。以下是...

    一个Oracle server process进程会消耗多少内存

    ### Oracle Server Process 进程内存消耗分析 #### 一、引言 在进行服务器配置规划时,特别是涉及内存分配的问题时,需要综合考虑多种因素,包括操作系统自身的内存占用、SGA(共享全局区)、PGA(程序全局区)...

    oracle for linux 安装

    3. 硬件与内存:根据数据库规模和预期负载,确保系统满足Oracle的硬件和内存要求。 4. SELinux与防火墙:可能需要调整SELinux策略或关闭防火墙以允许Oracle服务正常运行。 5. 数据库初始化:安装完成后,需要使用`...

    Statement Tracer for Oracle

    《Oracle语句追踪器——Statement Tracer for Oracle详解》 在Oracle数据库的管理和优化工作中,Statement Tracer for Oracle是一款至关重要的工具。它以其强大的功能和直观的用户界面,为DBA(数据库管理员)和...

Global site tag (gtag.js) - Google Analytics