Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18690510
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: Oracle

2008-03-21 14:46:16

Oracle9i进程的内存占用问题
 
 
  过去这段时间,我工作的其中之一就是在为一个电信业务系统的升级做准备,在两台IBM M85(6CPU*12G MEM AIX 5L)上对ORACLE9I RAC做详细的测试工作,开始的时候一切都很顺利,但后来却遇到一个难题,就是Oracle 9i的单个进程占用的内存过多。

  经过一段时间测试,在先后解决了其它问题后 ,最后的主要问题集中到了内存上,ORACLE9i在AIX 5L上每个进程都占用了很多内存,一个空连接进程就会用到5M多的内存,而众所周知,Oracle8i的单个进程占用的内存一般是2~3M,所以这就引起了我们的高度重视,因为如果按此计算,1000个连接什么事不做就要5G内存了!而我们的实际应用连接数比这还要多。

  在出现问题之后,我先后对ORACLE进行了不同方向的调整,也问过了一些朋友以及IBM和ORACLE的技术支持, 翻遍了国内外我所知道的论坛,都没有看到任何有意思的消息,更不要说解决方案了。这让我开始怀疑是Oracle9i的BUG,果然在6月底Oracle公布了这个BUG(我是在7月底看到的,因为7月份的大部分时间在处理别的事)!造成这个问题是因为AIX上C的编译器问题,使得本来可以共享的部分,最后都没有共享,造成每个进程都浪费了大约1MB的内存。详情参见本文最后BUG:3028673的描述。

  为了验证确实是AIX的问题,我在另外一台HP-UX B11.11上进行了同样的测试,结果显示Oracle9i的单个进程仍然占用很多内存!经过分析发现这是由于两方面原因造成的:

  1、Oracle9i的初始化参数CURSOR_SPACE_FOR_TIME从默认的FALSE改成了TRUE;

  2、HP-UX上的Oracle9i将虚拟内存数据页(virtual memory data pages)的默认值从原来的D(4KB)改成了L(1GB)。

  使用/usr/bin/chatr $ORACLE_HOME/bin/oracle查看oracle程序的内部属性 ,我们发现虚拟内存的text段从原来的16M改成了64M,而DATA段从原来的64M改成了L(最大可达到1GB)。经过测试验证 ,DATA段这个参数直接影响了Oracle9i单个进程所占用的内存的大小 。对于空连接来说,4MB是扩展的临界点,因为空连接是扩不到16MB(4MB的下一个可设DATA段大小)。


 

    Oracle8i和Oracle9i虚拟内存默认值对比:

8i
......
shared library binding:
   deferred
global hash table disabled
shared vtable support disabled
segments:
   index type address flags size
      5 text 4000000000000000 z-r-c 16M
      6 data 8000000100000000 ---m- 64M
executable from stack: D (default)
kernel assisted branch prediction enabled
lazy swap allocation for dynamic segments disabled

9i
.........
shared library binding:
   deferred
global hash table disabled
shared vtable support disabled
segments:
   index type address flags size
      5 text 4000000000000000 z-r-c 64M
      6 data 8000000100000000 ---m- L (largest possible)
executable from stack: D (default)
kernel assisted branch prediction enabled
lazy swap allocation for dynamic segments disabled

 我们可以使用/usr/bin/chatr +pd newsize $ORACLE_HOME/bin/oracle来更改DATA段的可用内存大小,对于text段的内存大小我们也可以使用chatr +pi来改,但gototop并不建议你这样做,因为text段是给命令用的。

  至此,我就在想了,自然在HP-UX上是因为这个原因造成的,那么在AIX上除了C编译器的原因之外,是否也存在着同样的问题呢?到目前为止,gototop还没有的等到任何可靠的消息来证明这一点,但我猜想可能性很大。

  gototop 2003年7月28日晚于办公室

附、BUG:3028673描述(摘自METALINK):

Bug 号
 3028673
 
已归档
 27-JUN-2003
 已更新
 08-JUL-2003
 
产品
 Oracle Server - Enterprise Edition V7
 产品版本
 9.2.0.3
 
平台
 Generic
 平台版本
 无数据
 
数据库版本
 9.2.0.3
 影响平台
 Port-Specific
 
优先级
 Severe Loss of Service
 状态
 Closed, Vendor OS Problem
 
基本 Bug
 N/A
 修复产品版本
 无数据
 


问题陈述:

ORACLE ON AIX DOES NOT SHARE MANY CONST STRUCTS - PER PROCESS MEMORY OVERHEAD


--------------------------------------------------------------------------------

*** 06/27/03 10:31 am ***

=========================   

PROBLEM:

1. Clear description of the problem encountered:

        Oracle on IBM AIX platforms (AIX 5L and 4.3.3) use a large amount of memory per dedicated connection. For Oracle 9.2 on AIX 5L the memory required per idle Oracle process appears to be about 5Mb. A significant portion of this is related to non-shared const structures (probably about 1Mb) . 

        This bug is to track the issue of the non-shared const structures.

。。。。。。后面部分省略。

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