zoukankan      html  css  js  c++  java
  • WINDOWS平台上扩展SGA转载itpub

    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的注册表中的HKLM\Software\Oracle\Homex下的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


    出处: http://www.itpub.net/showthread.php?s=&threadid=124424&perpage=10&pagenumber=1
    欢迎转载,但请注明出处!
  • 相关阅读:
    redis该怎么用
    cookie和session的比较
    web常见攻击
    请大神指导从大日志文件中统计关键字次数的办法
    apache中 MaxClients 与MaxRequestsPerChild
    如何提高缓存命中率
    CSU-ACM2018暑假集训比赛1
    CodeForces
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/kevinsun/p/680266.html
Copyright © 2011-2022 走看看