oracle内存分配与调整笔记

对于SGA区域内的内存来说,在unix上,必须为oracle设置共享内存段,因为oracle在unix上时多线程,而在windows上oracle是单进程,所以不用设置共享内存段。

在设置参数之前,我们首先要了解的几个问题:
1.物理内存多大
2.操作系统估计需要使用多少内存
3.数据库是使用文件系统还是裸设备
4.有多少并发连接
5.应用时OLTP类型还是OLAP类型

从经验上看,操作系统内存的使用一般是在200M左右。

接下来就是文件系统和裸设备的问题了,这往往容易被我们忽略。操作系统对于文件系统,使用了大量的buffer来缓存操作系统块。这样当数据库获取数据块的时候,虽然SGA中没有命中,但却实际上可能是从操作系统的文件缓存中获取的。而假如数据库和操作系统支持异步IO,则实际上当数据库写进程DBWR写磁盘时,操作系统在文件缓存中标记该块为延迟写,等到真正地写入磁盘后,操作系统才通知DBWR写磁盘完成。对于这部分文件缓存,所需要的内存可能比较大,作为保守的估计,我们应该考虑在0.2---0.3倍内存的大小。但是如果我们是使用裸设备,则不考虑这部分缓存的问题,这样的情况下SGA就有机会调大。

PGA-----单个会话所占用的内存数
sort_area_size在这部分内存中我们最关注,这是当查询需要排序的时候,数据库会话将使用这部分内存进行排序,当内存大小不足的时候,使用临时表空间进行磁盘排序。由于磁盘排序效率和内存排序效率相差好几个数量级,所以这个参数的设置很重要。


SGA-内参数设置
1.log_buffer
我们发现通常超过3M意义不是很大

2.large_pool_size
对于大缓冲池的设置,加入不使用MTS,建议在20-30M足够了。

3.java_pool_size
加入数据库没有使用java,我们通常认为保留10-20M大小足够。

4.shared_pool_size
首先我们要好好考究一个问题,那就是这部分内存起到什么作用,它是为了缓存已经被解析过的SQL,而使其能被重用,不再解析。这样做的原因是因为,对于一个新的SQL,数据库将执行硬解析,这是一个很耗资源的过程,而若已经存在,则进行的仅仅是软分析,这样消耗的资源大大减少。所以我们期望能够多共享一些SQL,并且如果设置该参数不过大,经常会出现ora-04031错误,表示为了解析新的SQL,没有可用的足够大的连续空闲空间。

5.data buffer
在确定了SGA的大小并分配完了前面部分的内存后,其余的,都分配给这部分内存。通常,在运行的情况下,我们都尝试使得这部分内存更大。这部分内存的作用主要是缓存DB BLOCK,减少甚至避免从磁盘上获取数据。

LOCK_SGA=true的问题
由于几乎所有的操作系统都支持虚拟内存,所以即使我们使用的内存小于物理内存,也不能避免操作系统将SGA换到虚拟内存(SWAP)。所有我们可以尝试使得SGA锁定在物理内存中不被换到虚拟内存中,这样减少页面的换入和换出,从而提高性能。但在这里遗憾的是,windows是无法避免这种情况的。


关于内存参数的调整
1.数据缓冲区命中率
如果命中率低于90%,则应该调整应用可可以考虑是否增大数据缓冲区。
2.共享池的命中率
如果共享池的命中率低于95%,就要考虑调整应用,或者增加内存。

资料来自:http://www.eygle.com/pdf/Oracle.SGA.Allocated.and.Tuning.pdf

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13062352/viewspace-614253/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13062352/viewspace-614253/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值