Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2617611
  • 博文数量: 323
  • 博客积分: 10211
  • 博客等级: 上将
  • 技术积分: 4934
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-27 14:56
文章分类

全部博文(323)

文章存档

2012年(5)

2011年(3)

2010年(6)

2009年(140)

2008年(169)

分类: Oracle

2008-03-30 15:23:29

在aix上,我们可以将oracle SGA pin在内存中,防止这部分内存交换。所以,通过pin住oracle SGA,能带来很大的性能好处。

如果想要正确的pin住内存,涉及到2个OS内核参数与一个oracle init参数:

1、aix参数v_pinshm=1,默认是0,表示aix将支持pin住内存,设置方法为

#vmo -p -o v_pinshm=1

2、aix参数maxpin%=内存百分比,默认80%,表示支持的最大的可pin住内存的比例,设置方法为

#vmo -p -o maxpin%=90

3、oracle参数LOCK_SGA=true,表示oracle将使用这部分被pin住的内存,其实就是告诉oracle使用另外一种内存调用方法。

因为这部分pin住的内存不仅仅是oracle在使用,aix内核也可能需要用到这部分内存,所以,我们不能设置SGA超过如下2个公式的范围:

1、SGA < 总内存*(maxpin%-10%),如果是默认值,则SGA不能超过总内存的70%

2、OS的pin住内存的总量(稳定运行时的总量,会随SGA大小而变化) < 总内存*(maxpin%-5%),如果是默认值,则pin住的内存总量,不能超过总内存的75%

至于Oracle的SGA总量,可以通过如下命令查看

  1. SQL> select sum(value)/1024/1024/1024 "SIZE(G)" from v$SGA;
  2.    SIZE(G)
  3. ----------
  4. 71.2681394

至于被pin住的内存总量,可以通过OS的命令svmon来查看

#svmon -G

size inuse free pin virtual memory 27394048 23520958 3873090 20424376 20884173 pg space 16777216 41932 ......

注意,以上pin住的部分,是表示4k大小的页面个数(没有使用大页的情况下),那么,折算成内存大小则是20424376*4/1024/1024=77.91G。

那么,如果采用默认的maxpin%设置(80%),我们将需要多大的物理内存呢?

公式1:物理内存 = 71.27/0.7 = 102G

公式2:物理内存 = 77.91/0.75 = 104G

在两者里面取大值,表示我们至少需要104G的物理内存,再去掉其它转换消耗,固定消耗,购买内存起码需要108G。

关于以上2个公式,我还想补充说明一下,在5.2的早些版本中,只需要满足公式1即可,如果实际设置的SGA内存超过了公式1的范围,其实OS也只pin住maxpin%-10%的内存,其它的没有pin住的内存,可能会导致交换的发生,最多是影响性能。

但是,aix 5.2以后的一些版本以及aix 5.3版本,因为不同page size的出现(如64K的page size的大量使用),如果不符合以上的两个公式,最严重的后果就是会导致OS被hang住,其实也就是aix的一个新的psm后台进程,一个负责页面转换的进程,当发现内存不够的时候,会直接杀掉运行的进程。

够狠,也够烂。

阅读(1011) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~