同一电梯维保合同标准版本版本为什么做出来内存大

由于windows机器很多,研究一下windows内存限制问题
内存优化是Windows平台的关键设置,首先了解一下Windows 2000平台的Oracle结构:
基于线程的结构
Windows2000是基于线程的结构,相反,Unix操作系统是基于进程的结构。这意味着Windows中更多的应用,包括Oracle在内,是以带
有多个线程的单个进程的形式执行,这种基于线程的结构的确给Window2000带来优势——更容易共享内存。内存空间为每个进程分配,进程间共享内存很
笨拙,要使用附加编码,线程是进程的子集,使用比进程少得多的内存。特定进程的所有线程共享同样的进程内存空间,同一进程的线程间共享内存比不同进程共享
内存要快,这给基于线程的结构很大优势,更有效。
在服务器上运行的每个应用程序都有一个,而且只有一个进程。进程是应用程序的载体,是用来容纳执行应用程序实际工作的线程的。从用户角度看,进程是不用任
何专门工具就可以看到的组件。进程对其他应用程序组件的作用就像容器一样。它持有虚拟的存储空间、数据、系统资源和应用程序设置。虽然线程可以分配、重新
分配和释放内存,但是进程接受初始的内存分配,并将它分配到请求内存的所有线程。线程是包含在进程内共享所有进程资源的单个执行路径。它还包含堆栈(存储
在内存中的变量和其他数据)、CPU寄存器的状态信息(所以,线程可以恢复它的环境)、和在系统调度程序的执行列表中的一个登录项。每个线程规定了完成任
务应用程序需要作的某种工作。
使用Task Manager的主要问题是看不到任何线程。Task
Manager被设计成从进程层将应用程序作为整体看待。当然还可以使用性能监视器来监视Windows下的Oracle内存使用。
从“开始/程序/管理工具”选择“性能”启动“系统监视器”。注意,“性能”包括两个MMC插件:“系统监视器”和“性能日志和变更”。这时,需要一些被监视的计数器(计数器是一些性能指示器,用于对
2000的特殊对象进行统计,例如统计特定线程所要求的处理器时间)。单击“添加”按钮(在图中看起来象一个加号),将看到“添加计数器”对话框。首先需要选择想监视的“性能”对象。在包含“进程”对象和“线程”对象的“性能”下拉列表中选择。
进程观察器(Process Viewer)是比较容易检查线程和进程的方法之一。可以在 Windows 2000 Support
Tools 或Windows 2000 Resource Kit内找到一些工具。Windows 2000 Support
Tools是Windows 2000的一部分,但是并不自动安装。支持安装的Windows
Installer文件在%CDROM%\SUPPORT\TOOLS\目录下。只要在2000RKST.MSJ上右击,并从context菜单上选择安装即可
基于线程的结构的确有一些内存限制,因为单个进程由线程组成,而进程的地址空间是受限的,因此很少有空间是机动的。因为Windows
2000仍然是32为操作系统,单个进程地址空间被限制在4GB内,其中一半被操作系统保留,这2GB被OS保留的系统内存也被视为系统地址空间,他包括
OS内核编码、硬件抽象层编码(HAL)和需要管理进程和OS交互的不同的其它结构,这2GB的系统地址空间是禁止应用程序进程访问的。因此,
Windows 2000标准服务器单个应用程序进程可使用内存空间共2GB。在Windows
2000高级服务器启动文件boot.ini中有/3GB开关,改变这个比例到3GB,这项技术被称作4GB调优(4-gigabyte
tuning,或4GT),我们将针对这个问题展开详细讨论。
保留的内存是分配给线程的内存并且留作将来使用,但没有实际使用的内存。因为没有实际使用,因此它对其它进程仍然有效。但是,因为它已经被分配,它仍然由
对拥有线程的进程的总的内存限制产生,因此,保留内存的计算针对2GB或3GB的限制,并且进程保留的和使用的内存的总和不能超过这个限制。
除了系统中安装的物理内存之外,Windows 2000还使用虚拟内存。这实际上是驻留在硬盘上的内存。但是Windows
2000使得它对应用程序来说,就像是安装在机器上内存一样。当某个应用程序块要求访问那个内存时,Windows
2000就把另外的内存块复制到磁盘上,而把所要求的内存放到物理内存中,这些内存块的大小是4KB。也就是说,每次应用程序提出对内存的要求时,内存就被分配在4KB的页面内。在磁盘上模拟内存的文件叫做页面调度文件。Virtual
Manager(VMM虚拟内存管理器)是操作系统管理机器上的虚拟内存组件。所有的内存访问都通过VMM。这意味着每当操作系统需要进行内存调页时,就要提出VMM请求。
内存调优方法:
(一)使用超过4GB的内存
另外,有办法允许为单个进程或应用分配超过32位地址空间的内存,为实现这一点,Windows
2000使用物理地址扩展(physical address extensions
,或PAE),PAE本质上把地址空间从32位增加到36位,但是必须有Pentium
Pro或更新的处理器才能享受这个优势。在Windows NT
4.0下,Intel提供PSE36驱动程序享受全部36位地址空间的优势,但是在Windows 2000 Advanced
Server中36位地址空间的支持已经建立在操作系统中,然而,应用程序必须使用地址窗口扩展(Address Windowing
Extensions ,或AWE)API写成,Oracle9i 发行号1(Release 1)不支持AWE,所有的Oracle
8i发行号(releases 8.1.5&8.1.7)都支持AWE。Oracle在9i发行号2(Release
2)中实现了对AWE的支持。
(二)AWE和Windows 2000
AWE允许你使用系统中任何附加的超过4GB的内存,为了体现这个优势,你必须有超过4GB的内存,必须有Pentium
Pro或更新的处理器,必须运行Windows 2000高级服务器或Windows
2000数据中心服务器,不需要特殊的驱动程序,因为Windows 2000已经支持AWE。
为了利用这项优势,必须在启动Windows
2000机器时在boot.ini文件中使用/PAE开关,你必须确保运行Oracle服务的帐户有Lock Pages in
Memory权限。给运行Oracle服务的帐户增加Lock Pages in Memory权限后,要重新启动OracleService
(三)AWE和Oracle
可以确定,Oracle8i所有发行号版本和Oracle9i发行号2只允许你为数据库块缓冲区配置超过4GB限制的内存空间,因此,要为用户连接释放标准进程地址空间的内存(低于3GB界限的内存)、PGA内存和组成SGA的不同内存缓冲池。
在初始化参数文件init.ora中要设置参数USE_INDIRECT_DATA_BUFFERS=TRUE,没有这个参数,Oracle不能寻址到
4GB以上的地址空间。接下来要设置决定内存使用总量的缓冲池大小,设定DB_BLOCK_SIZE和DB_BLOCK_BUFFERS两个参数。
在Oracle9i发行号2中,参数DB_BLOCK_BUFFERS被参数DB_CACHE_SIZE所代替,这样就改变了原来指定缓冲区块数到指定缓
冲区字节数,同样,也解释了在Oracle9i发行号2的一个数据库中支持多个数据库块大小。无论用哪种办法,如果你设定参数
USE_INDIRECT_BUFFERS=TRUE,你将只能定义和使用单个数据库块大小和块缓冲区(就象在9i以前的发行号中),因此,如果缺省数据
库块大小是4k、8k或其它,而设置DB_2k_CACHE_SIZE是不允许的。
接下来需要在注册表中为ORACLE_HOME设置合适的AWE_WINDOW_MEMORY参数值,也就是在HKEY_LOCAL_MACHINE\
Software\Oracle\HOME0下,这个参数指定字节数,如果没有设置,缺省值是1
GB。这个参数的大小取决于你要设置多少缓冲区大小,并视为来自3GB进程地址空间的常规内存。以缓冲区大小为6
GB为例,设置AWE_WINDOW_MEMORY为缺省值1GB,你希望1GB
视为常规内存,并且剩余5GB缓冲区来自4GB限制以上的地址空间。你希望更多的缓冲池尽可能保留在常规地址空间,因为访问超过4GB以上的缓冲池比访问虚拟地址空间缓冲池要慢(尽管仍然比磁盘I/O操作快)。
(四)解决与AWE相关的内存问题
需要注意的是每个4GB界限以上的块缓冲区需要在常规地址空间保留大约200字节的缓冲区头,因此,在上面的例子中,我们大约有312000个缓冲区头指
向扩展地址空间的缓冲区,缓冲区头大约占80MB常规内存空间,如果数据库块很小,那么这个数量会相当高,因此,必须确保这些缓冲区头、
AWE_WINDOW_MEMORY、和所有Oracle.exe进程的内存需求,包括编码、SGA其它组件、PGA内存和每个用户连接栈都适合
Oracle.exe进程的常规3GB虚拟地址空间。
确认你有足够的物理内存处理超过AWE_WINDOW_MEMORY之外的DB_BLOCK_BUFFERS,在我们的例子中定义缓冲池大小为6GB,
1GB来自常规地址空间,剩余5GB来自4GB以外的对整个进程有效的系统和进程地址空间,因此,这个例子只能工作在至少有9GB内存的机器上,你还应该
为其它进程保留一些空间,只有一个进程可以在某一时刻访问附加的内存。
象前面所说的那样,/PAE开关只用于系统有超过4GB物理内存的时候,但如果系统内存少于4GB时,也可模仿这项功能。在boot.ini文件中设置MAXMEM参数的值,如下面例子,设为2GB,意味着任何2GB以上的内存都将保留为AWE内存。
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows
2000 Advanced
Server" /fastdetect /PAE /MAXMEM:2048
为一个数据库使用附加的多个进程
真正的应用集群(Real Applications
Clusters,RAC)提供有多个实例运行和访问同一数据的能力。通常,这用于有两个或多个节点的项目,一个实例运行在每个节点。无论如何,它支持在
Oracle9i有两个实例运行在一个节点访问同一个数据库。这能克服每个进程的内存限制,又提供某些其它的利益,如应用程序失败检测。
... le.asp%3Fid%3D68310
参考的第二篇文档
如何让ORACLE使用16G内存
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 =
MIN(AWE_WINDOW_MEMORY)=(4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8
=( 4096 * 8192 * 256) / 8 =
bytes = 1024
这样在Windows的注册表中的HKLM\Software\Oracle\Homex下的AWE_WINDOW_MEMORY值至少是1024M,否则就会提示错误:
ORA-27102 out of memory&
OSD-00034 Message 34 Product=RDBMS;facility
O/S Error: (OS 8) Not enough storage is available to process this
[url]http://[/url] ***
/showthread.php?s=&threadid=124424&perpage=15&pagenumber=6
参考第三篇文档:
有这3篇高手写的文档就比较全面了,不过要注意在SGA_MAX参数参数存在的时候老是抱错,数据库起不来,把sga
max屏蔽后解决
众所周知,在32位的操作系统如win2K上,操作系统能管理的内存为4GB(power(2,32) =4G)
,oracle使用的总内存有2G限制。目前大多数信息系统都能为数据库服务器配上4G物理内存甚至更多,但无论你为系统配置多大的物理内存,正常情况下
都不能使oracle使用超过2G的内存(包含SGA、PGA等),从而造成系统资源浪费。那么,有没有什么办法能使运行在windows系统上的
oracle使用超过2G的内存呢?windows 提供了一种叫4GT(4G
Tuning)的技术,使得oracle使用超过2G(不超过3G)的内存成为可能。而为了让应用程序使用更大的内存,还有一种PSE36的技术,可以让
oracle使用超过3G的内存。这里,只对我们使用4GT特性让oracle使用超过2G的内存进行讨论。
  一 使用4GT特性的基本要求:
....尽管可以在不超过2G物理内存的系统上使用4GT特性,但oracle并不推荐这种做法,因为这将会严重降低系统性能。以我的经验来讲,如果系统
未安装4G物理内存,最好也不要使用这种方法来让oracle使用更多的内存。此外,在需要你的oracle使用超过2G的内存时,数据库服务器最好不要
再运行其他的服务,以减小系统的压力,让oracle工作得更好。
  ....另外,据MS的文档,4GT只能用于 Advanced Server , Datacenter版本上,Server 版以及
Professional 版不能使用4GT特性(实际上是不是也没有必要?)
   二 为什么4GT能让应用程序使用超过2G的内存
....在正常情况下,windows系统对内存的分配是这样的:在内存地址0x 到
0x7FFFFFFF之间的空间,交给应用程序使用,操作系统内核及其支持则使用内存地址 0x 到
0xFFFFFFFF之间的空间。在使用4GT之后,操作系统将内核及其支持程序使用的内存地址空间压缩到 0xC0000000 到
0xFFFFFFFF之间,从而为应用程序“让”出来1G的空间。但是,仅仅“让”出来了这1G的空间还是不够的,还需要指定哪一个应用程序来使用这“多
出来的”1G空间,以及如何分配份额等。后面将结合具体的参数设置来讨论。为便于讨论,我们将正常情况下应用程序可以使用的2G内存(即地址在
0x 到 0x7FFFFFFF 之间的内存)称作普通内存,而将windows “让”出来的1G内存(地址在
0x 到 0xBFFFFFFF之间)称作间接内存。
  三 oracle使用超过2G内存,不超过3G内存的具体设置步骤:
  1 首先应卸载实例,关闭oracle服务。
  2 打开操作系统3G开关:
  ....修改boot.ini文件,在启动windows项中添加 /3G
参数。修改过后的boot.ini文件应该类似以下内容:
  [boot loader]
  timeout=8
  default=multi(0)disk(0)rdisk(0)partition(1)
  [operating systems]
  multi(0)disk(0)rdisk(0)partition(1)="Microsoft Windows 2000
Advanced Server" /3G /fastdetect
  注意在启动win2K AdvServer的一栏里,多了一个 /3G
参数。这个参数的作用,就是让windows启动时,将自己的内核及支持程序装载到内存地址 0xC0000000 到 0xFFFFFFFF
之间,给应用程序留出3G的空间来。
  3 修改oralce 的 init.ora 文件
  ..1) 确定oracle的缓冲区及共享池大小,假设作如下定义:
  ........ db_block_size = 4096
  ........ db_block_buffers = 262144 # 缓冲区大小为1G
  ........ share_pool_size =
# 使用300M共享池
  ..2) 添加下列各项内容:
  ........ use_indirect_data_buffers = true
  ........ # 告诉oracle可以使用间接内存(即可以使用windows让出来的1G内存作为数据缓冲区)
  ........ pre_page_sga = true
  ........ # 把oracle SGA锁定到内存中,不产生页面交换文件(8i的参数可能是lock_sga =
  ........ # 对于一个有4G物理内存的系统来讲,可能这一个参数并不是必须的
  4 修改注册表,定义oracle的DBbuffer使用常规内存大小
  ....在注册表 _Local_Machine中添加一个二进制值,名称为AWE_WINDOW_MEMORY
,值的单位为字节,大小为你需要让oracle使用普通内存作为缓存的大小(不是windows让出来的1G,而是内存地址在0x
到 0x7FFFFFFF
之间的内存大小)。假如设为,即200M大小,那么oracle的数据缓冲区将占用200M的普通内存,其余部分(1G -
200M = 824M)则使用间接内存。
  5 重新启动操作系统,启动数据库。OK,你现在的 oracle 可以使用2G + 824M内存了。
  四 几个补充讨论
  1 windows系统“让”出来的1G间接内存,只能用于数据缓冲区
 ....在4GT特性测试中发现,间接内存只能用于数据缓冲区,而不能用于共享池,也不能分配给用户作为PGA。或许有其他的参数可以定义,但我查到的
文献中没有任何一篇讲间接内存可以用于哪些地方,而在我们的测试中发现按上面的修改后,间接内存只能用于数据缓冲区。此结论只作为一个经验,不是定论,请
各位大侠补充修正。
  2 注册表中 AWE_WINDOW_MEMORY 参数大小的定义
 ....这个参数定义缓冲池使用普通内存的大小,不能太小。在数据块大小为4K,缓冲池为1G(即使用262144个块作缓冲池)大小的情况下,此参数
定义为100M时,oracle不能启动,定义为200M时正常启动。根据我阅读文献后对这个情况的理解,数据缓冲区的每一个块的块头信息都将存放于普通
内存中,不能存放于间接内存中。如果此参数定义过小,导致缓冲区块头信息都不能存放,则可导致数据库启动失败。那么,是不是同样大小的缓冲区,数据库块越
大,则这个参数就可以定义得越小,因而可以占用更少的普通内存呢?有待验证。
  ....在具体的应用中,如何定义此参数,应综合考虑最大并发连接数(专用服务器模式下)、用户重用的堆栈大小、排序区、共享池、大池等内存参数的设置情况,尽可能的将数据缓冲区放到间接内存中,充分利用系统的资源。
  3 间接内存的性能
....据oracle的文献讲,间接内存的性能(我想主要是指速度和效率吧?)不如直接内存,绝不推荐在未安装有4G物理内存的系统上使用4GT特性。我不知道如何比较间接内存与直接内存的速度和效率,因而未作测试,姑且信之。
  ....一点小结,期望能对大家有所启发。还请各位大侠补充指正。
  以上内容的测试环境: IBM X360 +4G内存 + RAID 5阵列 Windows 2000 Advaced Server
SP3 + oracle 8.1.6 专用服务器模式
设置32位的2003 使用大于1.7的内存
前两天出差遇到:32位的windows 2003 使用大于1.7的内存的问题,PC上内存为16G,
但由于32位的CPU的在windows系统中2G给系统用2G给应用程序使用,如系统及参数不作修改时,oracle的SGA内存使用不能超过1.7G,所以要对一些进行windows和oracle参数据进行修改,大致有以下几步:
一 windows 上的参数据修改
1. 修改boot.ini文件,加/3GB /PAE
在这行,multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft
Windows" /3GB /PAE
2.修改windows 注册表
regedit到HKEY_LOCAL_MACHINESOFTWAREORACLEHOME0
这个目录中找到AWE_WINDOW_MEMORY这个参数,将其修改为oracle需要内存的大小:例如:6G时为:6*24
这个参数如不存在时,可以新建一个字符串名为AWE_WINDOW_MEMORY,值为上面讲过的大小,这个值需要足够大,不够时将报:
ORA-27102 out of memory
OSD-00034 Message 34
Product=RDBMS;facility =SOSD
O/S Error: (OS 8) Not enough storage is available to process this
3.修改windows控制面板中的工具--& 域安全策略--&
本地安全策略 --&锁定内存页 中加入启oracle数据库的OS用户名.
二 ORACLE数据库中要改的参数:
1.在改参数之前最好能先一个spfile到pfile 文件以防修改失败时可以从这个参数文件在启动数据库: create
pfile='d:inittest.ora'
2.主要修改的参数为:
_db_block_lru_latches --这个参数据大小为=CPU数*2*8
取消参数据:db_cache_size,sga_max_size
db_block_buffers
USE_INDIRECT_DATA_BUFFERS=TRUE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL& startup
ORACLE 例程已经启动。
Total System Global Area
Fixed Size 455256 bytes
Variable Size
Database Buffers
Redo Buffers 1191936 bytes
数据库装载完毕。
数据库已经打开。
SQL& alter system set "_db_block_lru_latches"=128
系统已更改。
SQL& alter system reset db_cache_size
scope=spfile sid='*';
系统已更改。
SQL& alter system set lock_sga=false
系统已更改。
SQL& alter system set db_block_buffers=1179648
系统已更改。
SQL& alter system set
use_indirect_data_buffers=true scope=
系统已更改。
SQL& create pfile='d:init2.ora'
文件已创建。
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
可以通过OEM来修改PGA,shared pool这些内存大小
SQL& startup
ORACLE 例程已经启动。
Total System Global Area
Fixed Size 455256 bytes
Variable Size
Database Buffers
Redo Buffers 1191936 bytes
数据库装载完毕。
数据库已经打开。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。114网址导航}

我要回帖

更多关于 手机内存卡读不出来 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信