1问题描述
 客户日志错误信息:
 ORA-04030:out of process memory when trying to allocate 32792 bytes(kxs-heap-b,bind var buf)2环境描述 
 服务器:linux x86 64位 oracle 版本:11.2.0.3.0 RAC服务器内存
instance-01:~ # free
             total       used       free     shared    buffers     cached
Mem:     132086024  115159744   16926280          0     553704   51055300
-/+ buffers/cache:   63550740   68535284
Swap:     20972540   12033480    8939060instance-02:~ # free
             total       used       free     shared    buffers     cached
Mem:     132086024   90207124   41878900          0     648828   31771148
-/+ buffers/cache:   57787148   74298876
Swap:     20972540          0   20972540oracle内存自动管理 memory_target 都为63744M
 
如何分析和解决这个问题呢,如需其他信息,我再另行提供。3目前我做了什么
首先,通过网络查询我可以排除以下两种情况:
a.不是32位操作系统限制内存的使用;
b.操作系统ulimit没有进行限制第二,我提取了两个实例的awr(一个时间跨度3天,一个4天)可是分析时遇到点问题,没分析出什么 
求助各位帮忙分析一下,是什么原因造成的这个问题,怎样进行分析(主要想听听思路),以及如何解决这个问题(调整memory_target就可以么)

解决方案 »

  1.   

    查一下,看看是不是有一个 SQL 语句,超过 32 K 的长度了?
      

  2.   

    SGA + PGA是否超过上限
      

  3.   

    我做了如下查询
    SELECT COMPONENT,
           CURRENT_SIZE / 1024 / 1024 / 1024 AS CURRENT_GB,
           MIN_SIZE / 1024 / 1024 / 1024 AS MINGB,
           MAX_SIZE / 1024 / 1024 / 1024 AS MAXGB,
           USER_SPECIFIED_SIZE / 1024 / 1024 / 1024 AS SPECIFIEDMB,
           OPER_COUNT,
           LAST_OPER_TYPE,
           LAST_OPER_MODE,
           LAST_OPER_TIME,
           GRANULE_SIZE / 1024 / 1024
      FROM V$MEMORY_DYNAMIC_COMPONENTS
      where component like '%GA%';
        COMPONENT CURRENT_GB MINGB MAXGB SPECIFIEDMB OPER_COUNT LAST_OPER_TYPE LAST_OPER_MODE LAST_OPER_TIME GRANULE_SIZE/1024/1024
    1 SGA Target 23.25 21.875 24.25 0 28 GROW DEFERRED 2015/9/20 10:06:04 128
    2 PGA Target 49.25 38.5 50.625 0 28 SHRINK MANUAL 2015/9/20 10:06:04 128SGA Target CURRENT_GB +PGA Target CURRENT_GB = 23.25+49.25=72.5
      

  4.   

    SELECT COMPONENT,
           CURRENT_SIZE / 1024 / 1024 / 1024 AS CURRENT_GB,
           MIN_SIZE / 1024 / 1024 / 1024 AS MINGB,
           MAX_SIZE / 1024 / 1024 / 1024 AS MAXGB,
           USER_SPECIFIED_SIZE / 1024 / 1024 / 1024 AS SPECIFIEDMB,
           OPER_COUNT,
           LAST_OPER_TYPE,
           LAST_OPER_MODE,
           LAST_OPER_TIME,
           GRANULE_SIZE / 1024 / 1024
      FROM V$MEMORY_DYNAMIC_COMPONENTS
      where component like '%GA%';
        COMPONENT CURRENT_GB MINGB MAXGB SPECIFIEDMB OPER_COUNT LAST_OPER_TYPE LAST_OPER_MODE LAST_OPER_TIME GRANULE_SIZE/1024/1024
    1 SGA Target 23.25 21.875 24.25 0 28 GROW DEFERRED 2015/9/20 10:06:04 128
    2 PGA Target 49.25 38.5 50.625 0 28 SHRINK MANUAL 2015/9/20 10:06:04 128SGA Target CURRENT_GB +PGA Target CURRENT_GB = 23.25+49.25=72.5
      

  5.   

    这个SGA+PGA怎么算的呢