oracle内存参数设置

1.SGA区的大小 

 SGA=log_buffer + Large_pool_size + java_pool_size + shared_pool_size + Data buffer
 SGA--
原则:物理RAM55%-58%SGA不能太小,Oracle性能会差,但是也不能过大,影响操作系统正常运作。
 log_buffer--
原则:128K -1M 之间,不可太大

 Large_pool_size--
原则:若不使用MTS,5 -10M 之间,不应该太大;若使用MTS,20 -30M
 Java_pool_size--
原则:假如数据库没有使用java,建议
20 -30M
 Shared_pool_size--
原则:这个参数对性能影响很大,通常为物理RAM
10%
 Data buffer--
原则:SGA中主要设置对象,一般为可用内存40%。数据缓冲区,这个参数对性能影响也很大,建议在确定了SGA的大小,和分配完前面的内存,剩下的都可以分配给Data bufferOracle9i设置数据缓冲区的参数为:Db_cache_size

 Oracle 9i 具有动态SGA的功能,用操作系统命令查看系统内存时,发现系统中还有空闲内存。 但为什么有时使用oracle 9i sql > alter system set db_cache_size=xxxxM 命令时数据库会报告错 -- 没有足够的内存. 这是由操作系统引起的吗?

 不是,原因在于此时SGA区中没有多余空闲内存。尽管系统中有空闲内存,但未分配给SGA 区。在oracle 9i 动态SGA的概念是无需经过关闭实例(instance, 修改初始化参数文件和重启实例这一过程,就可动态调整 buffer cache share pool 的大小。另外,动态SGA允许在实例运行时设置,下次启动时将有多少物理内存分配给SGA 这一数据库参数。SGA可用最大物理内存是由SGA_MAX_SIZE 参数来决定的。

 在启动实例时,大小为SGA_MAX_SIZE 的内存就分配给了SGASGA成员(buffer cache, share pool等)根据参数值也会获得相应的内存。

 实例启动后SGA的各成员所用内存之和可以小于SGA_MAX_SIZE。数据库管理员通过使用alter system命令来调整SGA成员间的内存分配。 SGA中有足够多的空闲内存时,增大share pool buffer cache 才能完成,否则会报内存不足。另外Share pool buffer cache 的尺寸也可动态缩小。 当实例已启动,SGA已达到 SGA_MAX_SIZE值,可通过先减少某一成员的内存,再增加另一成员的内存来完成。

 SGA成员间是相互独立的,在成员间分配内存时,其和一定不能大于 SGA_MAX_SIZE 并且db_cache_size 参数不能等于0

 OLAPOLTP混合型的应用环境中,利用动态SGA的功能,可以根据不同时刻应用的优先级,来动态的调整buffer cache share pool 的尺寸,以提高系统的性能

 a、当OLTP 应用 优先级高时,缩小 buffer cache 的值,增大 share pool 的值;
 b
、当 OLAP 应用优先级高时,缩小 share pool 的值,增大buffer cache 的值

 2.PGA区的大小

 ASort_area_size  用于排序所占内存
 B
Hash_area_size 用于散列联接,位图索引
 
这两个参数在非MTS下都是属于PGA ,不属于SGA,是为每个session单独分配的,在我们的服务器上除了OS + SGA,一定要考虑这两部分
 
原则:OS 使用内存+ SGA + session*(sort_area_size + hash_area_size + 2M ) < 总物理RAM 为好

 3.内存设置基本原则

 db_block_buffer 通常可以尽可能的大,shared_pool_size 要适度,log_buffer 通常大到几百K 1M 就差不多了

 4.如何使用大内存

 参考http://www.itpub.net/showthread.php?s=&threadid=124424&perpage=15&pagenumber=6http://www.itpub.net/356988.html

 1)首先要把windows 2000 advance server awe功能参数打开,在boot.ini文件里添加 /PAE的参数以支持 4G 以上内存。
 2)
oracle升级到 9.2.0 .6,关于oracle打补丁的文档请参考补丁随机文档按照文档作没出现错误;
 3)
windows在注册表 _Local_Machine software-oracle-home0中添加一个二进制值,名称为AWE_WINDOW_MEMORY ,值的单位为字节,我添加的是 1G
 4)oracle配置文件里修改参数:

 
屏蔽db_cache_size参数,
 
添加db_block_buffers=A),A乘以db_block_size=你想要的db_cache_size
 
添加
USE_INDIRECT_DATA_BUFFERS=TRUE
 
添加
pre_page_sga = true
 
添加
_DB_BLOCK_LRU_LATCHES=64
 
屏蔽sga_max参数(ORA-00385错误在存在sga_max时就出现,屏蔽之后就没了)

 5)
保存。
 6)ok

 5. 内存有关的视图

 --select * from v$sga_dynamic_components
 --select * from v$sga_dynamic_free_memory
 --select * from v$pgastat
 --select * from v$sga
 --select * from v$sgastat
 SELECT NAME, PHYSICAL_READS, DB_BLOCK_GETS, CONSISTENT_GETS,
       1 - (PHYSICAL_READS / (DB_BLOCK_GETS + CONSISTENT_GETS)) "Hit Ratio"
  FROM V$BUFFER_POOL_STATISTICS;

 6. buffer cache 调整建议

 SELECT size_for_estimate, buffers_for_estimate, estd_physical_read_factor, estd_physical_reads
    FROM V$DB_CACHE_ADVICE
    WHERE name          = 'DEFAULT'
      AND block_size    = (SELECT value FROM V$PARAMETER WHERE name = 'db_block_size')
      AND advice_status = 'ON';

 根据以上建议调整db_cache_size

 A common mistake is to continue increasing the buffer cache size. Such increases have no effect if you are doing full table scans or operations that do not use the buffer cache

 7. 让小表驻留内存(DB_KEEP_CACHE_SIZE 初始化参数)

 alter table t  storage(buffer_pool keep);

8.AWE_WINDOW_MEMORY实现故障解决

Oracle 8.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.0AWE_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
是个常量,等于8SETS_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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值