ORA-4031错误原理及诊断脚本汇总

4031_diag_script.zip

1. SGA中的内存池包含不同大小的内存块。当数据库启动时,就有一个大的内存块分配并被hush buckets 里的空闲列表追踪。随着时间推移,随着内存的分配和释放,内存块被按照大小在不同的hush buckets间移动。当SGA里任何一个内存池里出现不能满足内部分配请求的情况时,ORA-04031就出现了。
shared pool共享池的管理方式不同于其它的内存池。。共享池存放与数据字典和library cache有关的信息。但是,这些内存区域根据空闲列表和最近使用算法(LRU)管理。当在共享池的所有搜索结束后,从LRU列表清除所有的可能清除的对象, 多次扫描空闲列表后,仍没有找到内存块,ORA-04031就出现了。这意味着ORA-04031很难预测。

2. 对共享池的监测,可以看它是否包含许多类似的SQL,只有文字不同。 这种情况会占用更多的共享池内存并引共享池碎片,过多的共享池碎片(fragment)会导致虽然共享池中仍有大量的free memory,但都是尺寸较小的内存块(chunk),当Oracle进程申请一些较大的连续内存空间(memory chunk)时,虽然共享池中的free memory大小远大于申请的连续空间大小,仍会引发ORA-4031错误。使用绑定变量可以使SQL 共享。使用本文所附的脚本可以查出内存中是否有许多类似SQL。
即使使用了绑定变量后,仍然可能存在高version count(子指针)的情况。为了使子指针共享,CURSOR_SHARING参数可能需要调整。metalink 文档Note 296377.1 和 261020.1可以提供详细信息。若造成4031的原因是由于未绑定变量或者游标无法共享导致的过度硬解析(Hard Parse),则应当调整应用绑定变量或者调整初始化参数。

3.  9i中开始引入shared pool subpool子池技术。设计多个共享池子池的目的是分散单个shared pool LRU Latch的并行压力。 ,每一个子池都包含自有的LRU LIST和保留区域等其他内存结构。 subpools子池的数量会在Oracle实例启动(startup nomount)时根据SGA_MAX_SIZE(或11g中的memory_max_target)以及服务器上的CPU数量而自动决定。子池数量最多为7个,在Card系统中为4个。
每一个subpool都是一个”迷你型”的共享池,其包括自有的Freelist、内存结构记录和LRU LIST。subpool子池技术是对shared pool并发扩张能力的增强,且每一个子池现在都使用独立的shared pool child latch来保护。这意味着不再像9i以前的版本那样因为只有一个shared pool latch而剧烈争用了。
但是在实际使用中发现版本9i中仍存在一些BUG,可能导致在子池之间的内存使用分布不平衡均匀,这可能导致虽然部分子池使用率不高,但是个别子池内存过度分配,从而导致ORA-4031错误。一般把这种现象称作”subpool imbalance”。

 
 
 This issue could occur if in the “Memory Utilization of Subpool” sections in your trace file, there is skewed distribution of allocations across subpools, i.e. allocation size for one area in a subpool is much larger than the same area in another subpool.

Starting in 9i, the SGA can be divided into subpools. Multiple Subpools are designed to relieve pressure on a single LRU latch in the Shared Pool. Each subpool will include its own LRU list, Reserved Area, etc. The number of subpools is computed by an algorithm using the SGA_MAX_SIZE (or memory_max_target in 11g), and the number of CPU’s on the server. The maximum number of subpools is 7.

The shared pool and its associated reserved area, as well as the large pool, participate in subpooling. Each subpool is a “mini” shared pool, having its own set of Free Lists, memory structure entries, and LRU list. This was a scalability change made to the Shared Pool/Large Pool to increase the throughput of these pools in that now each subpool is protected by a Pool child latch. This means there is no longer contention in the Shared/Large Pool for a single latch as in earlier versions.

If the distribution of memory usage is not balanced somewhat equally among the subpools, we can get an ORA-4031 as one subpool is over allocated while others remain under allocated. This condition is known as a subpool imbalance.

By analyzing the uploaded file, we have found the following symptoms that may have caused the issue:
** In your trace file, there is evidence of subpool imbalance:
sql area in subpool 0 has 64536 bytes, while in subpool 4 it has 271924816 bytes, which is 4213 times larger.

Recommended Solution

1) Decrease the number of subpools in use, or increase SHARED_POOL_SIZE, depending on the current number of subpools.(To find the current number of subpools, see REFERENCE below)

If the current number of subpools is…
2…………….increase the parameter SHARED_POOL_SIZE by 15%
Note: If you decrease the subpools to one, you limit the Shared Pool to only one Least Recently Used (LRU) latch. One very large subpool maintains a long LRU list and memory operations in the Shared Pool can impact performance on the database. The level of impact is dependent on many factors. Testing of this change in your environment is the only reliable method to determine the cost of making this change in your database.
3…………….reduce the number of subpools to 2
4…………….reduce the number of subpools to 2
5…………….reduce the number of subpools to 3
6…………….reduce the number of subpools to 3
7…………….reduce the number of subpools to 3

Note: Decreasing the number of subpools (>1) may help alleviate the imbalance problem without affecting performance as heavily. Again testing of the change in your environment is the only reliable method to determine the performance impacts in your database.
You can change the number of subpools by:
SQL> alter system set “_kghdsidx_count”=(desired value of number of subpools) scope=spfile;

Note: _kghdsidx_count in the above mentioned SQL is a hidden parameter. However, changing this particular hidden parameter will not have side-effects within the database and can be modified as a workaround. This is not intended to be a long term fix.

2) Restart the database for the change to take effect.

3) If ORA-04031 errors persist, please review the following notes for known subpool imbalance issues.
NOTE:811974.1 – ORA-4031 In Partition Maintenance Job From Subpool Imbalance (Doc ID 811974.1)
NOTE:835176.1 – Ora-4031 Errors using Full Outer Joins
NOTE:6271590.8 – Bug 6271590 – SGA subheap imbalance with lots of free memory in a few subheaps
NOTE:4184298.8 – Bug 4184298 – Subpool imbalance for “session parameters” can lead to ORA-4031

o Instructions for capturing a heapdump from the next occurrence of an ORA-04031 error are shown below.
alter system set events ’4031 trace name HEAPDUMP level 2′;
o Turn this event off using
alter system set events ’4031 trace name HEAPDUMP off’;

4) If the latest patchset recommended by the above notes have been applied and ORA-04031 errors persist, please submit a new Service Request to have the issue investigated by Oracle Support.
NOTE: If you captured any heapdump please upload to the Service Request to expedite the resolution time on the Service Request.

REFERENCE: To check the current number of subpools, use the following query:

 

set pages 1000 lines 120
 col name for a60
col value for a30
 spool diagnosis1.lst

SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE;

 SELECT substr(sql_text,1,90) "SQL",count(*) , sum(executions) "TotExecs" FROM v$sqlarea WHERE executions < 5
GROUP BY substr(sql_text,1,90) HAVING count(*) > 30 ORDER BY 2;

select * from v$sgastat where pool like 'shared%' order by bytes;

select sa.sql_text,sa.version_count ,ss.* from v$sqlarea sa,v$sql_shared_cursor ss where sa.address=ss.ADDRESS and
sa.version_count > 50 order by sa.version_count ;

select nam.ksppinm NAME, val.KSPPSTVL VALUE from x$ksppi nam, x$ksppsv val where nam.indx = val.indx and
nam.ksppinm like '%shared%' order by 1;

col free_space for 999,999,999,999 head "TOTAL FREE"
col avg_free_size for 999,999,999,999 head "AVERAGE|CHUNK SIZE"
col free_count for 999,999,999,999 head "COUNT"
col reqeust_misses for 999,999,999,999 head "REQUEST|MISSES"
col reqeust_failures for 999,999,999,999 head "REQUEST|FAILURES"
col max_free_size for 999,999,999,999 head "LARGEST CHUNK"

select free_space, avg_free_size, free_count, max_free_size, request_misses, request_failures,LAST_FAILURE_SIZE from v$shared_pool_reserved

col Parameter format a25
col "Session Value" format a15
col "Instance Value" format a15

select a.ksppinm "Parameter", b.ksppstvl "Session Value", c.ksppstvl "Instance Value"
from sys.x$ksppi a, sys.x$ksppcv b, sys.x$ksppsv c
where a.indx = b.indx and a.indx = c.indx and a.ksppinm in
('__shared_pool_size','__db_cache_size','__large_pool_size','__java_pool_size','__streams_pool_size');

set pagesize 100
select * from v$sga_dynamic_components;

col requests for 999,999,999
col last_failure_size for 999,999,999 head "LAST FAILURE| SIZE "
col last_miss_size for 999,999,999 head "LAST MISS|SIZE "
col pct for 999 head "HIT|% "
col request_failures for 999,999,999,999 head "FAILURES"
select requests,
decode(requests,0,0,trunc(100-(100*(request_misses/requests)),0)) PCT, request_failures, last_miss_size, last_failure_size
from v$shared_pool_reserved;

select p.inst_id, p.free_space, p.avg_free_size, p.free_count,
  p.max_free_size, p.used_space, p.avg_used_size, p.used_count, p.max_used_size,
  s.requests, s.request_misses, s.last_miss_size, s.max_miss_size,
  s.request_failures, s.last_failure_size, s.aborted_request_threshold,
  s.aborted_requests, s.last_aborted_size
  from (select avg(x$ksmspr.inst_id) inst_id,
  sum(decode(ksmchcls,'R-free',ksmchsiz,0)) free_space,
  avg(decode(ksmchcls,'R-free',ksmchsiz,0)) avg_free_size,
  sum(decode(ksmchcls,'R-free',1,0)) free_count,
  max(decode(ksmchcls,'R-free',ksmchsiz,0)) max_free_size,
  sum(decode(ksmchcls,'R-free',0,ksmchsiz)) used_space,
  avg(decode(ksmchcls,'R-free',0,ksmchsiz)) avg_used_size,
  sum(decode(ksmchcls,'R-free',0,1)) used_count,
  max(decode(ksmchcls,'R-free',0,ksmchsiz)) max_used_size from x$ksmspr
  where ksmchcom not like '%reserved sto%') p,
    (select sum(kghlurcn) requests, sum(kghlurmi) request_misses,
    max(kghlurmz) last_miss_size, max(kghlurmx) max_miss_size,
    sum(kghlunfu) request_failures, max(kghlunfs) last_failure_size,
    max(kghlumxa) aborted_request_threshold, sum(kghlumer) aborted_requests,
    max(kghlumes) last_aborted_size from x$kghlu) s;

SELECT KSMCHCLS CLASS, COUNT(KSMCHCLS) NUM, SUM(KSMCHSIZ) SIZ,
To_char( ((SUM(KSMCHSIZ)/COUNT(KSMCHCLS)/1024)),'999,999.00')||'k' "AVG SIZE"
FROM X$KSMSP GROUP BY KSMCHCLS;

set pagesize 80
set verify off
set heading off
set feedback off
set termout off

col sp_size     format          999,999,999 justify right
col x_sp_used   format          999,999,999 justify right
col sp_avail    format          999,999,999 justify right
col sp_sz_pins format           999,999,999 justify right
col sp_no_pins format           999,999 justify right
col sp_no_obj format            999,999 justify right
col sp_sz_obj format            999,999 justify right
col sp_no_stmts format          999,999 justify right
col sp_sz_kept_chks format      999,999,999 justify right
col sp_no_kept_chks format      999,999 justify right

col val2 new_val x_sp_size noprint
select value val2
from   v$parameter
where  name='shared_pool_size'
/
col val2 new_val x_sp_used noprint
col val3 new_val x_sp_no_stmts noprint
select sum(sharable_mem+persistent_mem+runtime_mem) val2, count(*) val3
from   v$sqlarea
/
col val2 new_val x_sp_no_obj noprint
col val3 new_val x_sp_sz_obj noprint
select decode(count(*),'',0,count(*)) val2,
       decode(sum(sharable_mem),'',0,sum(sharable_mem)) val3
from v$db_object_cache
where type in ('PROCEDURE','FUNCTION','PACKAGE','PACKAGE BODY','TRIGGER')
/
col val2 new_val x_sp_avail noprint
select sum(ksmchsiz) val2 from x$ksmsp where ksmchcls = 'free'
/
col val2 new_val x_sp_no_kept_chks noprint
col val3 new_val x_sp_sz_kept_chks noprint
select decode(count(*),'',0,count(*)) val2,
       decode(sum(sharable_mem),'',0,sum(sharable_mem)) val3
from   v$db_object_cache
where  kept='YES'
/
col val2 new_val x_sp_no_pins noprint
select count(*) val2
from v$session a, v$sqltext b
where a.sql_address||a.sql_hash_value = b.address||b.hash_value
/
col val2 new_val x_sp_sz_pins noprint
select sum(sharable_mem+persistent_mem+runtime_mem) val2
from   v$session a,
       v$sqltext b,
       v$sqlarea c
where  a.sql_address||a.sql_hash_value = b.address||b.hash_value and
       b.address||b.hash_value = c.address||c.hash_value
/

set termout on
set heading off

ttitle -
  center  'Shared Pool''s Library Cache Information'  skip 2
select  'Size                                    : '
                ||&x_sp_size sp_size,
        'Number of shared cursors                : '
                ||&x_sp_no_stmts sp_no_stmts,
        'Used by shared cursors                  : '
                ||&x_sp_used,
        'Number of programmatic constructs       : '
                ||&x_sp_no_obj sp_no_obj,
        'Used by programmatic constructs         : '
                ||&x_sp_sz_obj sp_sz_obj,
        'Available                               : '
                ||&x_sp_avail sp_avail,
        'Kept object chunks                      : '
                ||&x_sp_no_kept_chks sp_no_kept_chks,
        'Kept object chunks size                 : '
                ||&x_sp_sz_kept_chks sp_sz_kept_chks,
        'Pinned statements                       : '
                ||&x_sp_no_pins sp_no_pins,
        'Pinned statements size                  : '
                ||&x_sp_sz_pins sp_sz_pins
from    dual
/

ttitle off
set heading on
set feedback on

set pages 1000 lines 120
 col name for a60
col value for a30

select * from v$sgastat where pool like 'shared%' and name='free memory';

select '0 (<140)' BUCKET, KSMCHCLS, KSMCHIDX, 10*trunc(KSMCHSIZ/10) "From", 
count(*) "Count" , max(KSMCHSIZ) "Biggest", 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ<140 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 10*trunc(KSMCHSIZ/10) 
UNION ALL 
select '1 (140-267)' BUCKET, KSMCHCLS, KSMCHIDX,20*trunc(KSMCHSIZ/20) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ between 140 and 267 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 20*trunc(KSMCHSIZ/20) 
UNION ALL
select '2 (268-523)' BUCKET, KSMCHCLS, KSMCHIDX, 50*trunc(KSMCHSIZ/50) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ between 268 and 523 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 50*trunc(KSMCHSIZ/50) 
UNION ALL 
select '3-5 (524-4107)' BUCKET, KSMCHCLS, KSMCHIDX, 500*trunc(KSMCHSIZ/500) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ between 524 and 4107 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 500*trunc(KSMCHSIZ/500) 
UNION ALL 
select '6+ (4108+)' BUCKET, KSMCHCLS, KSMCHIDX, 1000*trunc(KSMCHSIZ/1000) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ >= 4108 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 1000*trunc(KSMCHSIZ/1000);

SELECT KSMCHCLS CLASS, COUNT(KSMCHCLS) NUM, SUM(KSMCHSIZ) SIZ,
To_char( ((SUM(KSMCHSIZ)/COUNT(KSMCHCLS)/1024)),'999,999.00')||'k' "AVG SIZE"
FROM X$KSMSP GROUP BY KSMCHCLS;

SELECT alloc_type, alloc_size, num_objs_flushed, object_loaded
  FROM (SELECT ksmlrcom alloc_type,
               ksmlrsiz alloc_size,
               ksmlrnum num_objs_flushed,
               ksmlrhon object_loaded,
               RANK() OVER(ORDER BY ksmlrsiz DESC) AS order_ranking
          FROM x$ksmlru
         WHERE inst_id = USERENV('INSTANCE')
           AND ksmlrsiz > 0)
 WHERE order_ranking  400)
 WHERE order_ranking  0
           AND o.type LIKE 'JAVA%')
 WHERE order_ranking  0
           AND o.type in
               ('PACKAGE', 'FUNCTION', 'PROCEDURE', 'TRIGGER', 'SEQUENCE'))
 WHERE order_ranking  0
            AND o.type = 'CURSOR'
)
WHERE order_ranking

 
set pages 1000 lines 120
 col name for a60
col value for a30
 spool diagnosis1.lst

SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE;

 SELECT substr(sql_text,1,90) "SQL",count(*) , sum(executions) "TotExecs" FROM v$sqlarea WHERE executions < 5
GROUP BY substr(sql_text,1,90) HAVING count(*) > 30 ORDER BY 2;

select * from v$sgastat where pool like 'shared%' order by bytes;

select sa.sql_text,sa.version_count ,ss.* from v$sqlarea sa,v$sql_shared_cursor ss where sa.address=ss.ADDRESS and
sa.version_count > 50 order by sa.version_count ;

select nam.ksppinm NAME, val.KSPPSTVL VALUE from x$ksppi nam, x$ksppsv val where nam.indx = val.indx and
nam.ksppinm like '%shared%' order by 1;

col free_space for 999,999,999,999 head "TOTAL FREE"
col avg_free_size for 999,999,999,999 head "AVERAGE|CHUNK SIZE"
col free_count for 999,999,999,999 head "COUNT"
col reqeust_misses for 999,999,999,999 head "REQUEST|MISSES"
col reqeust_failures for 999,999,999,999 head "REQUEST|FAILURES"
col max_free_size for 999,999,999,999 head "LARGEST CHUNK"

select free_space, avg_free_size, free_count, max_free_size, request_misses, request_failures,LAST_FAILURE_SIZE from v$shared_pool_reserved

col Parameter format a25
col "Session Value" format a15
col "Instance Value" format a15

select a.ksppinm "Parameter", b.ksppstvl "Session Value", c.ksppstvl "Instance Value"
from sys.x$ksppi a, sys.x$ksppcv b, sys.x$ksppsv c
where a.indx = b.indx and a.indx = c.indx and a.ksppinm in
('__shared_pool_size','__db_cache_size','__large_pool_size','__java_pool_size','__streams_pool_size');

set pagesize 100
select * from v$sga_dynamic_components;

col requests for 999,999,999
col last_failure_size for 999,999,999 head "LAST FAILURE| SIZE "
col last_miss_size for 999,999,999 head "LAST MISS|SIZE "
col pct for 999 head "HIT|% "
col request_failures for 999,999,999,999 head "FAILURES"
select requests,
decode(requests,0,0,trunc(100-(100*(request_misses/requests)),0)) PCT, request_failures, last_miss_size, last_failure_size
from v$shared_pool_reserved;

select p.inst_id, p.free_space, p.avg_free_size, p.free_count,
  p.max_free_size, p.used_space, p.avg_used_size, p.used_count, p.max_used_size,
  s.requests, s.request_misses, s.last_miss_size, s.max_miss_size,
  s.request_failures, s.last_failure_size, s.aborted_request_threshold,
  s.aborted_requests, s.last_aborted_size
  from (select avg(x$ksmspr.inst_id) inst_id,
  sum(decode(ksmchcls,'R-free',ksmchsiz,0)) free_space,
  avg(decode(ksmchcls,'R-free',ksmchsiz,0)) avg_free_size,
  sum(decode(ksmchcls,'R-free',1,0)) free_count,
  max(decode(ksmchcls,'R-free',ksmchsiz,0)) max_free_size,
  sum(decode(ksmchcls,'R-free',0,ksmchsiz)) used_space,
  avg(decode(ksmchcls,'R-free',0,ksmchsiz)) avg_used_size,
  sum(decode(ksmchcls,'R-free',0,1)) used_count,
  max(decode(ksmchcls,'R-free',0,ksmchsiz)) max_used_size from x$ksmspr
  where ksmchcom not like '%reserved sto%') p,
    (select sum(kghlurcn) requests, sum(kghlurmi) request_misses,
    max(kghlurmz) last_miss_size, max(kghlurmx) max_miss_size,
    sum(kghlunfu) request_failures, max(kghlunfs) last_failure_size,
    max(kghlumxa) aborted_request_threshold, sum(kghlumer) aborted_requests,
    max(kghlumes) last_aborted_size from x$kghlu) s;

SELECT KSMCHCLS CLASS, COUNT(KSMCHCLS) NUM, SUM(KSMCHSIZ) SIZ,
To_char( ((SUM(KSMCHSIZ)/COUNT(KSMCHCLS)/1024)),'999,999.00')||'k' "AVG SIZE"
FROM X$KSMSP GROUP BY KSMCHCLS;

set pagesize 80
set verify off
set heading off
set feedback off
set termout off

col sp_size     format          999,999,999 justify right
col x_sp_used   format          999,999,999 justify right
col sp_avail    format          999,999,999 justify right
col sp_sz_pins format           999,999,999 justify right
col sp_no_pins format           999,999 justify right
col sp_no_obj format            999,999 justify right
col sp_sz_obj format            999,999 justify right
col sp_no_stmts format          999,999 justify right
col sp_sz_kept_chks format      999,999,999 justify right
col sp_no_kept_chks format      999,999 justify right

col val2 new_val x_sp_size noprint
select value val2
from   v$parameter
where  name='shared_pool_size'
/
col val2 new_val x_sp_used noprint
col val3 new_val x_sp_no_stmts noprint
select sum(sharable_mem+persistent_mem+runtime_mem) val2, count(*) val3
from   v$sqlarea
/
col val2 new_val x_sp_no_obj noprint
col val3 new_val x_sp_sz_obj noprint
select decode(count(*),'',0,count(*)) val2,
       decode(sum(sharable_mem),'',0,sum(sharable_mem)) val3
from v$db_object_cache
where type in ('PROCEDURE','FUNCTION','PACKAGE','PACKAGE BODY','TRIGGER')
/
col val2 new_val x_sp_avail noprint
select sum(ksmchsiz) val2 from x$ksmsp where ksmchcls = 'free'
/
col val2 new_val x_sp_no_kept_chks noprint
col val3 new_val x_sp_sz_kept_chks noprint
select decode(count(*),'',0,count(*)) val2,
       decode(sum(sharable_mem),'',0,sum(sharable_mem)) val3
from   v$db_object_cache
where  kept='YES'
/
col val2 new_val x_sp_no_pins noprint
select count(*) val2
from v$session a, v$sqltext b
where a.sql_address||a.sql_hash_value = b.address||b.hash_value
/
col val2 new_val x_sp_sz_pins noprint
select sum(sharable_mem+persistent_mem+runtime_mem) val2
from   v$session a,
       v$sqltext b,
       v$sqlarea c
where  a.sql_address||a.sql_hash_value = b.address||b.hash_value and
       b.address||b.hash_value = c.address||c.hash_value
/

set termout on
set heading off

ttitle -
  center  'Shared Pool''s Library Cache Information'  skip 2
select  'Size                                    : '
                ||&x_sp_size sp_size,
        'Number of shared cursors                : '
                ||&x_sp_no_stmts sp_no_stmts,
        'Used by shared cursors                  : '
                ||&x_sp_used,
        'Number of programmatic constructs       : '
                ||&x_sp_no_obj sp_no_obj,
        'Used by programmatic constructs         : '
                ||&x_sp_sz_obj sp_sz_obj,
        'Available                               : '
                ||&x_sp_avail sp_avail,
        'Kept object chunks                      : '
                ||&x_sp_no_kept_chks sp_no_kept_chks,
        'Kept object chunks size                 : '
                ||&x_sp_sz_kept_chks sp_sz_kept_chks,
        'Pinned statements                       : '
                ||&x_sp_no_pins sp_no_pins,
        'Pinned statements size                  : '
                ||&x_sp_sz_pins sp_sz_pins
from    dual
/

ttitle off
set heading on
set feedback on

set pages 1000 lines 120
 col name for a60
col value for a30

select * from v$sgastat where pool like 'shared%' and name='free memory';

select '0 (<140)' BUCKET, KSMCHCLS, KSMCHIDX, 10*trunc(KSMCHSIZ/10) "From", 
count(*) "Count" , max(KSMCHSIZ) "Biggest", 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ<140 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 10*trunc(KSMCHSIZ/10) 
UNION ALL 
select '1 (140-267)' BUCKET, KSMCHCLS, KSMCHIDX,20*trunc(KSMCHSIZ/20) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ between 140 and 267 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 20*trunc(KSMCHSIZ/20) 
UNION ALL
select '2 (268-523)' BUCKET, KSMCHCLS, KSMCHIDX, 50*trunc(KSMCHSIZ/50) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ between 268 and 523 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 50*trunc(KSMCHSIZ/50) 
UNION ALL 
select '3-5 (524-4107)' BUCKET, KSMCHCLS, KSMCHIDX, 500*trunc(KSMCHSIZ/500) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ between 524 and 4107 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 500*trunc(KSMCHSIZ/500) 
UNION ALL 
select '6+ (4108+)' BUCKET, KSMCHCLS, KSMCHIDX, 1000*trunc(KSMCHSIZ/1000) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ >= 4108 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 1000*trunc(KSMCHSIZ/1000);

SELECT KSMCHCLS CLASS, COUNT(KSMCHCLS) NUM, SUM(KSMCHSIZ) SIZ,
To_char( ((SUM(KSMCHSIZ)/COUNT(KSMCHCLS)/1024)),'999,999.00')||'k' "AVG SIZE"
FROM X$KSMSP GROUP BY KSMCHCLS;

SELECT alloc_type, alloc_size, num_objs_flushed, object_loaded
  FROM (SELECT ksmlrcom alloc_type,
               ksmlrsiz alloc_size,
               ksmlrnum num_objs_flushed,
               ksmlrhon object_loaded,
               RANK() OVER(ORDER BY ksmlrsiz DESC) AS order_ranking
          FROM x$ksmlru
         WHERE inst_id = USERENV('INSTANCE')
           AND ksmlrsiz > 0)
 WHERE order_ranking  400)
 WHERE order_ranking  0
           AND o.type LIKE 'JAVA%')
 WHERE order_ranking  0
           AND o.type in
               ('PACKAGE', 'FUNCTION', 'PROCEDURE', 'TRIGGER', 'SEQUENCE'))
 WHERE order_ranking  0
            AND o.type = 'CURSOR'
)
WHERE order_ranking

 

set pages 1000 lines 120
 col name for a60
col value for a30
 spool diagnosis1.lst

SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE;

 SELECT substr(sql_text,1,90) "SQL",count(*) , sum(executions) "TotExecs" FROM v$sqlarea WHERE executions < 5
GROUP BY substr(sql_text,1,90) HAVING count(*) > 30 ORDER BY 2;

select * from v$sgastat where pool like 'shared%' order by bytes;

select sa.sql_text,sa.version_count ,ss.* from v$sqlarea sa,v$sql_shared_cursor ss where sa.address=ss.ADDRESS and
sa.version_count > 50 order by sa.version_count ;

select nam.ksppinm NAME, val.KSPPSTVL VALUE from x$ksppi nam, x$ksppsv val where nam.indx = val.indx and
nam.ksppinm like '%shared%' order by 1;

col free_space for 999,999,999,999 head "TOTAL FREE"
col avg_free_size for 999,999,999,999 head "AVERAGE|CHUNK SIZE"
col free_count for 999,999,999,999 head "COUNT"
col reqeust_misses for 999,999,999,999 head "REQUEST|MISSES"
col reqeust_failures for 999,999,999,999 head "REQUEST|FAILURES"
col max_free_size for 999,999,999,999 head "LARGEST CHUNK"

select free_space, avg_free_size, free_count, max_free_size, request_misses, request_failures,LAST_FAILURE_SIZE from v$shared_pool_reserved

col Parameter format a25
col "Session Value" format a15
col "Instance Value" format a15

select a.ksppinm "Parameter", b.ksppstvl "Session Value", c.ksppstvl "Instance Value"
from sys.x$ksppi a, sys.x$ksppcv b, sys.x$ksppsv c
where a.indx = b.indx and a.indx = c.indx and a.ksppinm in
('__shared_pool_size','__db_cache_size','__large_pool_size','__java_pool_size','__streams_pool_size');

set pagesize 100
select * from v$sga_dynamic_components;

col requests for 999,999,999
col last_failure_size for 999,999,999 head "LAST FAILURE| SIZE "
col last_miss_size for 999,999,999 head "LAST MISS|SIZE "
col pct for 999 head "HIT|% "
col request_failures for 999,999,999,999 head "FAILURES"
select requests,
decode(requests,0,0,trunc(100-(100*(request_misses/requests)),0)) PCT, request_failures, last_miss_size, last_failure_size
from v$shared_pool_reserved;

select p.inst_id, p.free_space, p.avg_free_size, p.free_count,
  p.max_free_size, p.used_space, p.avg_used_size, p.used_count, p.max_used_size,
  s.requests, s.request_misses, s.last_miss_size, s.max_miss_size,
  s.request_failures, s.last_failure_size, s.aborted_request_threshold,
  s.aborted_requests, s.last_aborted_size
  from (select avg(x$ksmspr.inst_id) inst_id,
  sum(decode(ksmchcls,'R-free',ksmchsiz,0)) free_space,
  avg(decode(ksmchcls,'R-free',ksmchsiz,0)) avg_free_size,
  sum(decode(ksmchcls,'R-free',1,0)) free_count,
  max(decode(ksmchcls,'R-free',ksmchsiz,0)) max_free_size,
  sum(decode(ksmchcls,'R-free',0,ksmchsiz)) used_space,
  avg(decode(ksmchcls,'R-free',0,ksmchsiz)) avg_used_size,
  sum(decode(ksmchcls,'R-free',0,1)) used_count,
  max(decode(ksmchcls,'R-free',0,ksmchsiz)) max_used_size from x$ksmspr
  where ksmchcom not like '%reserved sto%') p,
    (select sum(kghlurcn) requests, sum(kghlurmi) request_misses,
    max(kghlurmz) last_miss_size, max(kghlurmx) max_miss_size,
    sum(kghlunfu) request_failures, max(kghlunfs) last_failure_size,
    max(kghlumxa) aborted_request_threshold, sum(kghlumer) aborted_requests,
    max(kghlumes) last_aborted_size from x$kghlu) s;

SELECT KSMCHCLS CLASS, COUNT(KSMCHCLS) NUM, SUM(KSMCHSIZ) SIZ,
To_char( ((SUM(KSMCHSIZ)/COUNT(KSMCHCLS)/1024)),'999,999.00')||'k' "AVG SIZE"
FROM X$KSMSP GROUP BY KSMCHCLS;

set pagesize 80
set verify off
set heading off
set feedback off
set termout off

col sp_size     format          999,999,999 justify right
col x_sp_used   format          999,999,999 justify right
col sp_avail    format          999,999,999 justify right
col sp_sz_pins format           999,999,999 justify right
col sp_no_pins format           999,999 justify right
col sp_no_obj format            999,999 justify right
col sp_sz_obj format            999,999 justify right
col sp_no_stmts format          999,999 justify right
col sp_sz_kept_chks format      999,999,999 justify right
col sp_no_kept_chks format      999,999 justify right

col val2 new_val x_sp_size noprint
select value val2
from   v$parameter
where  name='shared_pool_size'
/
col val2 new_val x_sp_used noprint
col val3 new_val x_sp_no_stmts noprint
select sum(sharable_mem+persistent_mem+runtime_mem) val2, count(*) val3
from   v$sqlarea
/
col val2 new_val x_sp_no_obj noprint
col val3 new_val x_sp_sz_obj noprint
select decode(count(*),'',0,count(*)) val2,
       decode(sum(sharable_mem),'',0,sum(sharable_mem)) val3
from v$db_object_cache
where type in ('PROCEDURE','FUNCTION','PACKAGE','PACKAGE BODY','TRIGGER')
/
col val2 new_val x_sp_avail noprint
select sum(ksmchsiz) val2 from x$ksmsp where ksmchcls = 'free'
/
col val2 new_val x_sp_no_kept_chks noprint
col val3 new_val x_sp_sz_kept_chks noprint
select decode(count(*),'',0,count(*)) val2,
       decode(sum(sharable_mem),'',0,sum(sharable_mem)) val3
from   v$db_object_cache
where  kept='YES'
/
col val2 new_val x_sp_no_pins noprint
select count(*) val2
from v$session a, v$sqltext b
where a.sql_address||a.sql_hash_value = b.address||b.hash_value
/
col val2 new_val x_sp_sz_pins noprint
select sum(sharable_mem+persistent_mem+runtime_mem) val2
from   v$session a,
       v$sqltext b,
       v$sqlarea c
where  a.sql_address||a.sql_hash_value = b.address||b.hash_value and
       b.address||b.hash_value = c.address||c.hash_value
/

set termout on
set heading off

ttitle -
  center  'Shared Pool''s Library Cache Information'  skip 2
select  'Size                                    : '
                ||&x_sp_size sp_size,
        'Number of shared cursors                : '
                ||&x_sp_no_stmts sp_no_stmts,
        'Used by shared cursors                  : '
                ||&x_sp_used,
        'Number of programmatic constructs       : '
                ||&x_sp_no_obj sp_no_obj,
        'Used by programmatic constructs         : '
                ||&x_sp_sz_obj sp_sz_obj,
        'Available                               : '
                ||&x_sp_avail sp_avail,
        'Kept object chunks                      : '
                ||&x_sp_no_kept_chks sp_no_kept_chks,
        'Kept object chunks size                 : '
                ||&x_sp_sz_kept_chks sp_sz_kept_chks,
        'Pinned statements                       : '
                ||&x_sp_no_pins sp_no_pins,
        'Pinned statements size                  : '
                ||&x_sp_sz_pins sp_sz_pins
from    dual
/

ttitle off
set heading on
set feedback on

set pages 1000 lines 120
 col name for a60
col value for a30

select * from v$sgastat where pool like 'shared%' and name='free memory';

select '0 (<140)' BUCKET, KSMCHCLS, KSMCHIDX, 10*trunc(KSMCHSIZ/10) "From", 
count(*) "Count" , max(KSMCHSIZ) "Biggest", 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ<140 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 10*trunc(KSMCHSIZ/10) 
UNION ALL 
select '1 (140-267)' BUCKET, KSMCHCLS, KSMCHIDX,20*trunc(KSMCHSIZ/20) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ between 140 and 267 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 20*trunc(KSMCHSIZ/20) 
UNION ALL
select '2 (268-523)' BUCKET, KSMCHCLS, KSMCHIDX, 50*trunc(KSMCHSIZ/50) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ between 268 and 523 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 50*trunc(KSMCHSIZ/50) 
UNION ALL 
select '3-5 (524-4107)' BUCKET, KSMCHCLS, KSMCHIDX, 500*trunc(KSMCHSIZ/500) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ between 524 and 4107 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 500*trunc(KSMCHSIZ/500) 
UNION ALL 
select '6+ (4108+)' BUCKET, KSMCHCLS, KSMCHIDX, 1000*trunc(KSMCHSIZ/1000) , 
count(*) , max(KSMCHSIZ) , 
trunc(avg(KSMCHSIZ)) "AvgSize", trunc(sum(KSMCHSIZ)) "Total" 
from x$ksmsp 
where KSMCHSIZ >= 4108 
and KSMCHCLS='free' 
group by KSMCHCLS, KSMCHIDX, 1000*trunc(KSMCHSIZ/1000);

SELECT KSMCHCLS CLASS, COUNT(KSMCHCLS) NUM, SUM(KSMCHSIZ) SIZ,
To_char( ((SUM(KSMCHSIZ)/COUNT(KSMCHCLS)/1024)),'999,999.00')||'k' "AVG SIZE"
FROM X$KSMSP GROUP BY KSMCHCLS;

SELECT alloc_type, alloc_size, num_objs_flushed, object_loaded
  FROM (SELECT ksmlrcom alloc_type,
               ksmlrsiz alloc_size,
               ksmlrnum num_objs_flushed,
               ksmlrhon object_loaded,
               RANK() OVER(ORDER BY ksmlrsiz DESC) AS order_ranking
          FROM x$ksmlru
         WHERE inst_id = USERENV('INSTANCE')
           AND ksmlrsiz > 0)
 WHERE order_ranking  400)
 WHERE order_ranking  0
           AND o.type LIKE 'JAVA%')
 WHERE order_ranking  0
           AND o.type in
               ('PACKAGE', 'FUNCTION', 'PROCEDURE', 'TRIGGER', 'SEQUENCE'))
 WHERE order_ranking  0
            AND o.type = 'CURSOR'
)
WHERE order_ranking

 

 

 

NB Bug Fixed Description
  16816103 11.2.0.4, 12.1.0.1.1, 12.1.0.2, 12.2.0.0 XIN aborts with ORA-4031 due to memory leak in OCIXStreamInCommit
  16710753 11.2.0.4, 12.1.0.2, 12.2.0.0 Excess shared pool memory use / ORA-4031 from DROP EDITION
  16571785 11.2.0.4, 12.1.0.2, 12.2.0.0 High “KTC latch subh” SGA memory use due to “lobs commit callback”
  13951456 12.1.0.2, 12.2.0.0 ASMCMD does not use bind variables in its SQL – affects shared pool
  16009158 11.2.0.3.BP19, 11.2.0.4, 12.1.0.1 ORA-4031 / excess shared pool memory using Securefiles
  15931756 11.2.0.3.BP21, 11.2.0.4, 12.1.0.1 ORA-4031 / Queries against SYS_FBA_TRACKEDTABLES not shared (do not use binds)
  8673737 11.2.0.4, 12.1.0.1 Diagnostic enhancement to summarize sub-pool allocations in ORA-4031 trace files
  14053298 11.1.0.6 “kksss-heap” memory leak from PMON cleanup (ORA-4031) when audit enabled
  15881004 11.2.0.4, 12.1.0.1 Excessive Memory usage with Extended Cursor Sharing
  14292825 11.2.0.3.BP10, 11.2.0.4, 12.1.0.1 ORA-4031 in ASM as default memory parameters values for 11.2 ASM instances low
  14029050 11.2.0.2.BP18, 11.2.0.3.BP10, 11.2.0.4, 12.1.0.1 MMAN failing to donate granules despite unused PGA (possible ORA-4031)
  14003090 11.2.0.3.8, 11.2.0.3.BP20, 11.2.0.4, 12.1.0.1 ORA-4031 with high memory utilization in the ‘init_heap_kfsg’ subheap / “ASM map headers” under ‘init_heap_kfsg’
  13814739 11.2.0.3.7, 11.2.0.3.BP19, 11.2.0.4, 12.1.0.1 Excessive KQR X PO” allocations in a RAC environment (can cause ORA-4031)
  13536971 12.1.0.1 ORA-4031 with large partition tables – superseded
  13456573 11.2.0.4, 12.1.0.1 Many child cursors / ORA-4031 with large allocation in KGLH0 using extended cursor sharing
  13430938 11.2.0.3.4, 11.2.0.3.BP10, 11.2.0.4, 12.1.0.1 ORA-4031 with high “KTC latch subh” memory usage
  13255388 11.2.0.4, 12.1.0.1 Slow parsing of large number of subqueries eligible for coalescing.
  13250244 11.2.0.2.8, 11.2.0.2.BP18, 11.2.0.3.4, 11.2.0.3.BP10, 11.2.0.4, 12.1.0.1 Shared pool leak of “KGLHD” memory when using multiple subpools
  13072654 11.2.0.3.8, 11.2.0.3.BP21, 11.2.0.4, 12.1.0.1 Unnecessary ORA-4031 for “large pool”,”PX msg pool” from PQ slaves
  12387969 11.2.0.3, 12.1.0.1 get_geometry() does not use bind variables internally leading to shared pool fragmentation
  11782790 11.2.0.3, 12.1.0.1 Excess CPU & memory use / ORA-4030 / ORA-4031 parsing deeply nested queries
  11651810 11.2.0.2.3, 11.2.0.2.BP07, 11.2.0.3, 12.1.0.1 ORA-4031 or Excess shared pool use can be seen by FileOpenBlock objects
  11063191 11.2.0.2.7, 11.2.0.2.BP17, 11.2.0.3.2, 11.2.0.3.BP04, 11.2.0.4, 12.1.0.1 ORA-4031 with hint /*+ CURSOR_SHARING_EXACT */ – excessive “KKSSP^nn” memory
  10634096 11.2.0.3, 12.1.0.1 excessive memory usage with grouping sets and temp table transformation
  10359631 11.2.0.3, 12.1.0.1 High elapsed time and shared pool usage during parse with virtual columns
  10325953 11.2.0.3, 12.1.0.1 ORA-600[733] / ORA-4031 allocating memory for hash join – superceded
  10308906 11.2.0.3, 12.1.0.1 ORA-4031 using structured binary XMLIndex
  10089333 11.2.0.2.6, 11.2.0.2.BP15, 11.2.0.3, 12.1.0.1 “init_heap_kfsg” memory leaks in SGA of db instance using ASM
  10082277 11.2.0.1.BP12, 11.2.0.2.3, 11.2.0.2.BP04, 11.2.0.3, 12.1.0.1 Excessive allocation in PCUR or KGLH0 heap of “kkscsAddChildNo” (ORA-4031)
  10042937 11.2.0.3, 12.1.0.1 High memory group in ges_cache_ress and ORA-4031 errors in RAC
  9578670 11.2.0.1.BP11, 11.2.0.2.5, 11.2.0.2.BP09, 11.2.0.2.GIPSU05, 11.2.0.3, 12.1.0.1 ORA-4031 from frequent Partition Maintenance Operation
  9403026 11.2.0.2, 12.1.0.1 Startup or PQ can report ORA-4031 errors requesting large “PX msg pool” chunks of memory
  9320130 10.2.0.5.3, 11.2.0.2, 12.1.0.1 ORA-4031 for “temporary tabl” using temporary table transformations (STAR / WITH)
  9015983 11.2.0.1.1, 11.2.0.2, 12.1.0.1 ORA-4031 for “temporary tabl” on query with star transformation
  8934457 11.2.0.2, 12.1.0.1 ORA-4031 during EXPLAIN PLAN or ORA-4030 during SELECT
  8835591 11.2.0.2, 12.1.0.1 Excess memory use parsing invalid SQL with COUNT() in subquery select list
  8813366 11.1.0.7.3, 11.2.0.1.1, 11.2.0.1.BP04, 11.2.0.2, 12.1.0.1 ORA-4031 due to over large granule size
  8537544 11.2.0.2, 12.1.0.1 Excess memory use / ORA-600 / dumps parsing SQL with many nested outer joins / ANSI joins
  7509451 11.2.0.3.7, 11.2.0.3.BP19, 11.2.0.4, 12.1.0.1 SGA memory leak possible for “KSN WaitID” memory when using shared servers
  13548390 11.2.1.8.8 Error 4031 in kgttusec – plsql memory > 1g unreliable
  9026008 11.2.0.1.BP02, 11.2.0.2, 12.1.0.1 “GES_RESOURCES” may increase over time with high enqueue activity
  9058900 11.2.0.1.BP10, 11.2.0.2 OERI [kcbi_get_bhs_4] / “Shared IO Pool” takes too much SGA memory
  8599477 11.1.0.7.3, 11.2.0.1 Large “kcbi io desc” shared pool allocations can lead to ORA-4031
  8528171 10.2.0.5.6, 11.1.0.7.10, 11.2.0.1 High shared pool use due to frequent ADD/EXCHANGE partition operations
  8371884 10.2.0.5, 11.2.0.1 Dumps/Errors/Excessive Parse Time and Memory allocation with Star transformation
  8244734 10.2.0.5, 11.1.0.7.8, 11.2.0.1 NUMA Pool misconfigured at startup (ORA-4031)
  8221425 11.1.0.7.2, 11.2.0.1 ORA-4031 with kgs-heap overusing one subpool
  7462463 10.2.0.5, 11.2.0.1 R-tree Index based spatial query on large table fails with ORA-4031 / ORA-7445 [kghualloc]
  7443808 11.2.0.1 Excessive Shared Memory utilization during Query Parsing
  7340448 10.2.0.4.1, 10.2.0.5, 11.1.0.7.1, 11.2.0.1 Excess shared pool memory use / ORA-4031 from REGEXP_LIKE – superceded
  7250182 11.2.0.1 Excess shared pool memory for AQ (“kwqiccns: notification st” chunks)
  7207921 10.2.0.5, 11.2.0.1 State object leak / ORA-4031 from stale guess DBAs on secondary IOT index
  7031622 10.2.0.5, 11.2.0.1 Spin on kkojnp / ORA-600 [15160] with Star transformation
  6868080 10.2.0.5, 11.1.0.7, 11.2.0.1 ORA-4031 with NUMA
  6858062 10.2.0.4.1, 10.2.0.5, 11.1.0.7.5, 11.2.0.1 Shared pool memory leak when services created / deleted
  6800507 10.2.0.4.1, 10.2.0.5, 11.1.0.7, 11.2.0.1 Shared pool memory leak (“ksws service *” memory) using EXPDP often
  6730567 10.2.0.5, 11.2.0.1 ORA-4031 / OERI [17137] with NUMA optimization enabled
  6624011 11.1.0.7, 11.2.0.1 ORA-4030 / ORA-4031 on startup with > 4Gb SGA_TARGET
  6530861 10.2.0.5, 11.2.0.1 ORA-4301 when using stored Java
  6334552 10.2.0.4, 11.1.0.7, 11.2.0.1 Hang / ORA-4031 / OERI:kfrcsoDelete_3 on rollback of ASM file resize
  6271590 10.2.0.4.2, 10.2.0.5, 11.1.0.7, 11.2.0.1 SGA subheap imbalance with lots of free memory in a few subheaps
  6086162 11.2.0.1 Slow parsing / Excessive Memory Usage with Star Transformation and Query Rewrite
  6126415 11.1.0.7 OERI [kjccgmb:1] during shutdown instance
  6011182 10.2.0.4, 11.1.0.7 Parsing of large query takes long time / memory leak / ORA-4030 /4031
  5386986 10.2.0.4, 11.1.0.7 Leak / ORA-4031 leak when DROP UNUSED COLUMN issued on large partitioned table
  13888380   ORA-4031 in DB instance when using ASM due to high use of “init_heap_kfsg” memory
  10363436   Memory leak / ORA-4031 using TDE column encryption with PKI keys
  12808696 11.1.0.6 Shared pool memory leak of “hng: All sessi” memory
  7306915 10.2.0.4.4, 10.2.0.5, 11.1.0.6 EXCHANGE PARTITION leaks “KGL handles” shared pool memory
  6043052 10.2.0.4, 11.1.0.6 Leak in perm allocations with “library cache” comments (ORA-4031)
  6001617 10.2.0.4, 11.1.0.6 LCK may accumulate CPU time / ORA-4031 possible
  5950708 10.2.0.4, 11.1.0.6 ‘gcs resources’ and ‘gcs shadows’ are imbalanced across shared pool subpools
  5618049 10.2.0.4, 11.1.0.6 “mvobj part des” leaked memory after partition DDL (ORA-4031)
  5573238 10.2.0.4, 11.1.0.6 Shared pool memory use / ORA-4031 due to “obj stat memo” in one subpool
  5548510 10.2.0.4, 11.1.0.6 _FIX_CONTROL parameter leaks memory in the shared pool
  5548389 10.2.0.4, 11.1.0.6 Library cache allocation for ‘column mapping’ not using uniform sized extents
  5508505 10.2.0.4, 11.1.0.6 ORA-4031 while shared heap still has unused reserved extents
  5479172 10.2.0.4, 11.1.0.6 ORA-4031 with multiple partially-allocated permanent chunks
  5377973 10.2.0.4, 11.1.0.6 Register schema fails with ORA-4031
  5240264 11.1.0.6 ORA-4030 / ORA-4031 / Excessive Memory Usage with view merging and large IN LISTs.
  4994956 10.2.0.3, 11.1.0.6 Number of configured shared pool subpools not correct
  4467058 10.2.0.4, 11.1.0.6 IO requests can flush the pool / signal a hidden ORA-4031 error
  3519807 9.2.0.8, 10.1.0.5, 10.2.0.2, 11.1.0.6 ORA-4031 querying V$SEGSTAT
  3291723 10.2.0.3, 11.1.0.6 DBWR may crash instance if shared pool memory low
  6347725   “obj stat mem” leak when global temporary tables used
  4195175 9.2.0.7, 10.1.0.5, 10.2.0.1 Create MVIEW with large WHERE clause may dump / ORA-4031
  4184298 10.1.0.5, 10.2.0.1 Subpool imbalance for “session parameters” can lead to ORA-4031
  3948384 9.2.0.7, 10.1.0.4, 10.2.0.1 ORA-4031 possible using LGWR ASYNC for archiving
  3513427 10.1.0.3, 10.2.0.1 ORA-4031 can cause many SGA heapdumps to occur causing shared pool latch contention
  3419396 10.2.0.1 Restore spfile with dummy instance from ASM fails with RMAN-20001 / ORA-4031
  3405237 9.2.0.6, 10.1.0.3, 10.2.0.1 ORA-4031 / excessing SGA consumption due to large IN LIST and NOT IN list
  3356492 10.2.0.1 DBMS_LOB.LOADFROMFILE leaks library cache locks / shared pool “perm” memory
  3299407 9.2.0.6, 10.1.0.3, 10.2.0.1 Invalidating cursors frequently can fragment the SGA and leak “kglau” memory
  3046725 10.2.0.1 ORA-4031 due to shared_pool fragmented with high ges resources & enqueues
  2953931 9.2.0.4, 10.2.0.1 ORA-4031 parsing query with numerous groupings
* 4658188 9.2.0.8 Long waits for “ksu process alloc latch yield”
  4231921 9.2.0.8, 10.1.0.2 Truncate partition tables leaks SGA memory
  3232401 9.2.0.5, 10.1.0.2 ORA-4031 with Streams apply site
+ 3150705 9.2.0.5, 10.1.0.2 Fix to help reduce the chances of an ORA-4031 with high OPEN_CURSORS
  3150680 9.2.0.5, 10.1.0.2 Excessive shared pool permanent memory use / ORA-4031 possible with SESSION_CACHED_CURSORS
  3083818 10.1.0.2 Reloaded cursors can leak shared pool memory
  3077651 9.2.0.5, 10.1.0.2 LOB manipulation can leak “buffer” state objects causing hangs/shared pool problems
  2846138 10.1.0.2 Dump (under opiosq0) from SVRMGRL sessions when shared pool is full
  2817728 9.2.0.4, 10.1.0.2 Shared pool memory leak / ORA-4031 when collecting segment statistics
  2804724 9.2.0.4, 10.1.0.2 Out of memory in JAVA POOL shows an ORA-4031 “shared pool” message
  2798851 9.2.0.4, 10.1.0.2 ORA-4031 possible from SMON during SHUTDOWN or STARTUP
  2793038 9.2.0.4, 10.1.0.2 Session may die with ORA-4031 if shared pool exhausted when storing object level statistics
  2786968 9.2.0.4, 10.1.0.2 Shared pool memory leak / ORA-4031 on repeated invalidate/execute of cursors
  2607029 9.2.0.3, 10.1.0.2 High memory use optimizing SQL with functional indexes and many expressions
  2586762 9.2.0.3, 10.1.0.2 Direct LOB reads can result in ORA-4031 / excessive shared pool usage
  2563301 9.2.0.5, 10.1.0.2 ORA-4031 possible in RAC environment under load
  2561115 9.2.0.5, 10.1.0.2 SGA memory growth using outbound TCP/IP database links from shared servers
  2523151 9.2.0.3, 10.1.0.2 ORA-7445[updexe] with AUDIT_TRAIL=DB with stressed shared pool
  2501591 9.2.0.3, 10.1.0.2 ORA-928 / ORA-4031 on “ALTER VIEW <sys_view> COMPILE” if REMOTE objects exist with same name
  2486954 9.2.0.3, 10.1.0.2 ORA-4031 / Dump from concurrent DGURIServlet access to SQLX XMLType view
  2351854 9.0.1.4, 9.2.0.2, 10.1.0.2 Dispatchers may hang if ORA-4031 occurs
  1782381 9.2.0.5, 10.1.0.2 Excessive SGA use / ORA-4031 possible with large number of JOBS
  2805335 9.2.0.4 Excessive shared pool memory use for parse of certain statments using functional indexes
  2442042 9.2.0.5 ORA-4031 possible using STREAMS on multi-cpu machine
  2472541 9.2.0.2 PMON ORA-7445 [kghxfr] after shared server gets ORA-4031
  2244789 9.0.1.4, 9.2.0.1 ORA-4031 / excessive shared pool usage from query with full outer join / union
  2244642 9.0.1.4, 9.2.0.1 ALTER VIEW operations may encounter ORA-4031 errors
  2208570 8.1.7.4, 9.0.1.4, 9.2.0.1 ORA-4030 / ORA-4031 / spin during query optimization with STAR TRANSFORMATION and unmergable view
  2185294 9.2.0.1 Shared server may dump (koklhfr) after ORA-4031 in “LARGE POOL”
  2167326 9.0.1.3, 9.2.0.1 ORA-4031 possible during patch set upgrade scripts
  2143637 9.0.1.3, 9.2.0.1 ORA-4031 possible starting the cache advisory
  2129178 8.1.7.4, 9.0.1.3, 9.2.0.1 Using NULL or an empty string (”) in an INLIST can cause ORA-4031 / waste shared pool memory
  2104071 8.1.7.4, 9.0.1.3, 9.2.0.1 ORA-4031 / excessive “miscellaneous” shared pool use possible (many PINS)
  1865917 8.1.7.3, 9.0.1.2, 9.2.0.1 ORA-4031 / high CPU from OR expansion of negated predicates with RBO
  1333526 8.1.7.3, 9.0.1.2, 9.2.0.1 ORA-4031 / Poor performance using persistent Object data types
  1642964 9.0.1.0 ORA-4031 / sga leak from IOT as inner table in NESTED LOOP
  1640583 8.1.7.1, 9.0.1.0 ORA-4031 due to leak / cache buffer chain contention from AND-EQUAL access
+ 1397603 8.1.7.2, 9.0.1.0 ORA-4031 / SGA memory leak of PERMANENT memory for buffer handles
  1396675 8.1.7.2, 9.0.1.0 PLSQL may hang/spin/ORA-4031 with SQL WHERE (a,b) in ( (c1,d1),(c2,d2)… )
  1340718 8.1.7.2, 9.0.1.0 OERI:KCBSTC_PARENT_AB possible in CKPT following an ORA-4031 error
  1348501 8.1.6.3, 8.1.7.0 MV refresh unnecessarily invalidates shared cursors
  1328709 8.0.6.2, 8.1.6.3, 8.1.7.0 OERI:15428 can be raised when ORA-4031 is hit internally
  1256011 8.0.6.2, 8.1.6.2, 8.1.7.0 MTS servers may OERI:1113 after an ORA-4031 (OERI:730 on 8i)
  1092621 8.1.6.2, 8.1.7.0 ORA-4031 when DROPPING a PARTITION
  898798 8.1.5.1, 8.1.6.0 ORA-4031 on startup from large DB_BLOCK_BUFFERS (or GC_RELEASABLE_LOCKS)
  431303 7.3.3.1, 7.3.4.0 Startup gives ORA-4031 with GC_DB_LOCKS=157K
comm diag script:

1. Upload the output for:
> opatch lsinventory -detail

2. Please upload following trace and incidents files associated with occurrences of 4031 errors.


3. Upload the initialization parameter file for this database.

4. How many times the error has been reported? Is it one-time or many ?

5. Does the error happen around the same time?

6. What has changed? Any parameter changed?

7. Has the application changed or the workload increased?

8. Kindly describe your environment.Is it RAC or standalone environment? Is ASM used ?

9. what actions have been done during the occurrence of errors?

10. Are you able to reproduce this issue at will?

11. Provide the output for :
connect user/password
select sql_id, sql_text, version_count from v$sqlstats
where version_count > 5
order by version_count desc;

12. Provide the output for :
connect user/password
select * from v$sga_dynamic_components;
select * from V$MEMORY_DYNAMIC_COMPONENTS;

select * from V$SHARED_POOL_RESERVED;

select nam.ksppinm NAME, val.KSPPSTVL VALUE from x$ksppi nam, x$ksppsv val
where nam.indx = val.indx and nam.ksppinm like '%shared%' order by 1;

select a.ksppinm "Parameter",
b.ksppstvl "Session Value",
c.ksppstvl "Instance Value"
from sys.x$ksppi a, sys.x$ksppcv b, sys.x$ksppsv c
where a.indx = b.indx and a.indx = c.indx
and a.ksppinm like '%kghdsidx%';

select PQ_SLAVE_MISMATCH , PX_MISMATCH from V$SQL_SHARED_CURSOR;

set linesize 90
set pagesize 60
column component format a25
column Final format 99,999,999,999
column STARTED format A25

SELECT COMPONENT ,OPER_TYPE,FINAL_SIZE Final,to_char(start_time,'dd-mon hh24:mi:ss') STARTED FROM V$SGA_RESIZE_OPS;

SELECT COMPONENT,OPER_TYPE,COUNT(1) FROM V$SGA_RESIZE_OPS GROUP BY COMPONENT,OPER_TYPE;

SELECT A.BEGIN_INTERVAL_TIME,A.END_INTERVAL_TIME, B.BYTES
FROM WRM$_SNAPSHOT A, DBA_HIST_SGASTAT B
WHERE A.SNAP_ID = B.SNAP_ID
AND B.POOL = 'SHARED POOL' AND B.NAME = 'KGH: NO ACCESS' ORDER BY 1;

show parameter session_cached_cursors;

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

1) by checking the share pool usage


Shared Pool Usage
===========================================================
R-free - Reserved List
R-freea - Reserved List
free - Free Memory
freeabl - Memory for user / system processing
perm - Memory allocated to the system
recr - Memory for user / system processing

what exactly perm is referring to ? is there any indication for showing the healthiness of the share pool by referring to this statistics ?
we found that , every time there was a ora-4031 occur, the value of perm with a high value.


2) doc 146599.1, is it useful to to monitor X$KSMSP View , is it Similar to Heapdump Information ?


3) doc 146599.1, is it Useful to track allocations in the shared pool that cause other objects in the shared pool to be aged?
SELECT * FROM X$KSMLRU WHERE ksmlrsiz > 0;

4)Is REQUEST_MISSES valid when init para SHARED_POOL_RESERVED_MIN_ALLOC not set?



1.) PERM allocations refer to PERMANENT allocations. Permanent allocations are never freed. They live till lifetime of instance. That is why those allocations keep on growing. For 10.2.0.4 are you using Automatic Shared Memory Management ?

2.) It is similar to heapdump information but If you are using Automatic shared_memory management it may not give exact information.

3.) It is useful in case you are seeing lots of invalidations/reloads. Query v$librarycache to get that information.

4.) By default, _shared_pool_reserved_min_alloc is set to 4400 bytes. So, request misses are valid in that case as well.

Please note that frequently querying x$ views is not recommended. Queries on these views are lock intensive and may impact performance.

a.) Permanent allocations cannot be flushed by using 'alter system flush shared_pool' command. Permanent allocations get released only after instance restart. There is no specified ratio/percentage of permanent chunks in the shared_pool space.

b.) The first point to start is

1. Monitor v$sgastat. Check for any component that is growing abnormally. For example, if 'KGH: NO ACCESS' component has grown abnormally, you can check in metalink for known bugs. In case the 'SQL area' is growing abnormally, it may be a cause of concern as application may not be bind variables. Then taking heapdump may reveal if that is cause of fragmentation.

2. Querying v$librarycache is of help to understand the HIT ratio, reloads and invalidations that have happened since instance startup.

3. In severe cases or for diagnostics, heapdumps may be taken along with errorstack.

'sql area' is a component that can be seen as a part of output from v$sgastat.
Suppose we have shared_pool sized to 500M and as the time passes. As the time progresses, in case you see this component growing to 200-250M, it is likely that application is not using bind variables. To check if application is using bind variables or not, you can gather AWR reports and check sections 'sql ordered by version count' This section would give SQLs that didn't get shared due to some reasons. After that SR can be raised for more understanding.

In case ORA-04031 error gets reported, you can refer the following document and upload the information to the SR for analysis.

Article-ID: Note 430473.1
Title: ORA-4031 Common Analysis/Diagnostic Scripts

1.) Library cache overview gives the following:

*** High level breakdown of memory ***

sharable : 39.93M
persistent : 32.11M
runtime : 30.27M

SQL Memory Usage (total) : 102.31M (80%)

Shareable memory refers to memory that can be shared. Example: if an sql is using bind variables, it is likely that the parse tree for that statement would be shared with next session executing the same sql.

Persistent memory is something similar to Permanent memory that would remain till lifetime.
Execution/runtime memory refers to the memory that is required during execution of a cursor/sql

There should be less number of SQLs that are executed just once. Because, if sql's are not shared, each SQL would be having its own execution plan and would get executed independently... in other words, multiple unshareable statements just one execution.
On the other hand, if SQLs are shared, there would be one statement with multiple executions.

2.) There should be less misses in the library cache. The more the hit percentage, more is the probability that a shareable sql is found in library cache. In case, we are not able to find the misses in library cache would increase and we would require reload of parse tree in the library cache.

3.) Resize operations are done internally by oracle when using ASMM using feedback mechanisms from advisories. In case there are lots of resize operations and there are lots of shrinks and growth of components happenning in the SGA, you may need to set the values of those components to some value and as such those components would not shrink below the specified value.

4.) Versions HWM: Gives The highest number of children that are present in the cache under a parent for an SQL statement, from the time when instance was last started.

I believe that you are trying to set these warnings and alert using EM.
Anyways, there is no rule of considering the permanent memory growth as Threshold and critical.
You can set 60% as threshold and 75% as critical.

Please note that 200M is very low for a production database to work. With 200M of shared_pool size, It is highly likely to receive ORA-04031 in this case.
Minimum size of shared_pool for 10g database is recommended as 500M based on empirical analysis. In case the permanent chunks are increasing abnormally, we would consider taking a heapdump incase the problem is occurring again and again.

When Automatic Shared Memory is in use, we have a concept of shared pool durations. In memory there is different lifetime for every memory data structure. Some data structures (memory chunks) remain till lifetime of instance (instance duration or permanent chunks) and some live just till the time session is there (session duration) and so forth. With ASMM enabled, permanent chunks don't scan LRU list to get memory. They directly contact granule manager for more memory. In case if granule manager is not able to release that memory, ORA-04031 gets reported.

In such cases, we would consider disabling ASMM (setting sga_target to zero and manually setting values of db_cache_size, shared_pool_size).

In case you have disabled ASMM and still seeing abnormal growth of permanent chunks, we may have to take heapdump for analysis and check in case it is a memory leak/bug. However, to alleviate the problem, DB restart is the only option because, permanent chunks would not get released using 'alter system flush shared_pool' command.

Regarding RAC and shared_pool_size:

RAC specific memory is allocated at the time of SGA creation, mostly in the shared pool. However, the memory does not count in the SHARED_POOL_SIZE as defined in the init.ora parameter file. Therefore, when migrating Oracle from single instance to RAC, you do not need to adjust the SHARED_POOL_SIZE parameter to accommodate the additional memory that RAC uses; Oracle does that automatically. Note that the memory for the KCL global cache lock elements will be allocated in the buffer cache, and not in the shared pool.

The note: 455179.1 clearly talks about how to calculate number of subpools allocated at startup. What is your question ?

Shared_pool reserved is for large requests greater than or equal to 4400 bytes. So, any request that wants shared pool space of 4400 bytes or more would search normal shared_pool space. In case it is not able to find the same sized chunk, only then it would go and scan the reserved pool for free chunks. So, only in case of large requests, shared_pool_reserved would come into picture.

In the view v$shared_pool_reserved, we generally look at "REQUEST_FAILURES" to check 'Number of times that no memory was found to satisfy a request.' In case this keeps on increasing, it may be a signal of impending ORA-04031 error.

It is the same question that you asked earlier as well.

Yes, the number of misses and number of objects executed once has to be monitored.
How much is the threshold value for that is something that we cannot easily suggest. Ideally, misses should be zero. That means, whatever we are trying to find is already present in the library cache. As suggested earlier in the output of 'LibCacheOverview.sql' , Ideal percentages for 1 time executions is 20% or lower.

The REQUEST_MISSES you are referring to the view from v$shared_pool_reserved. That is within the reserved area. You may be seeing lots of misses in the normal shared_pool area. Query v$librarycache to get the number of misses in library cache. And apart from Misses there are lots of other reasons to receive ORA-04031 error.

There are lots of queries that may have different version counts. Suppose:

SQL> select * from emp, may have 4 different children.

Another SQL may be having version count of 12. So, if 12 is the highest version count for the instance, Version HWM would report the highest version count for a sql in instance.

Largest memory object refers to the max. size of object that was loaded in shared pool. In your case it is 408,084 bytes.

REQUEST_MISSES is related to RESERVED POOL. Reserved pool is meant for large allocations like PL/SQL compilations or trigger compilation. Only requests that are larger than 4400 bytes can go and check for free space in reserved pool.

Please note that allocations below 4400 bytes would not go to reserved area. You may get ORA-04031 error while requesting for 64 bytes.
So, in this case REQUEST_MISSES parameter would not mean anything. It may be zero or any positive number. This is because a 64 bytes request would never go and check RESERVED POOL.

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

got BUG 9578670 - ORA-4031 WHILE DROP PARTITIONS so we need a patch for the bug
Bug 9578670: ORA-4031 WHILE DROP PARTITIONS, SOLUTION FROM DOC ID: 419551.1 DIDN'T HELP
Product Version 11.1.0.7
Fixed in Product Version 12.1
Fix By 11.2.0.3
No backport available for 11.2.0.2

REDISCOVERY INFORMATION:
If you are running frequent partition maintenance operations, have multiple
subpools in the shared pool, and encounter ORA-4031 out of memory errors due
to many "mvobj part des" allocations, you could be hitting this issue.

WORKAROUND:
Set "_kghdsidx_count"=1.

Alert file
----------

Wed Feb 16 04:26:22 2011
Errors in file /u01/app/oracle/diag/rdbms/jasper/jasper/trace/jasper_dw00_13679.trc  (incident=36418):
ORA-04031: unable to allocate 4128 bytes of shared memory ("shared pool","UPDATE_CREATE","PRTMV^3a844b88","kkpomSort hashed kpn's")
Incident details in: /u01/app/oracle/diag/rdbms/jasper/jasper/incident/incdir_36418/jasper_dw00_13679_i36418.trc
Wed Feb 16 04:26:44 2011
Errors in file /u01/app/oracle/diag/rdbms/jasper/jasper/trace/jasper_ora_31713.trc  (incident=36578):
ORA-04031: unable to allocate 32 bytes of shared memory ("shared pool","unknown object","KGLH0^edb30de5","kglHeapInitialize:temp")
Incident details in: /u01/app/oracle/diag/rdbms/jasper/jasper/incident/incdir_36578/jasper_ora_31713_i36578.trc
Wed Feb 16 04:26:47 2011
Errors in file /u01/app/oracle/diag/rdbms/jasper/jasper/trace/jasper_dw0e_6924.trc  (incident=36466):
ORA-04031: unable to allocate 32 bytes of shared memory ("shared pool","unknown object","KGLH0^56d22d85","kglHeapInitialize:temp")
Incident details in: /u01/app/oracle/diag/rdbms/jasper/jasper/incident/incdir_36466/jasper_dw0e_6924_i36466.trc
Wed Feb 16 04:26:47 2011
Errors in file /u01/app/oracle/diag/rdbms/jasper/jasper/trace/jasper_cjq0_9684.trc  (incident=36362):
ORA-04031: unable to allocate 32 bytes of shared memory ("shared pool","unknown object","KGLH0^bd2af6d6","kglHeapInitialize:temp")
Incident details in: /u01/app/oracle/diag/rdbms/jasper/jasper/incident/incdir_36362/jasper_cjq0_9684_i36362.trc
Wed Feb 16 04:26:47 2011
Errors in file /u01/app/oracle/diag/rdbms/jasper/jasper/trace/jasper_dw01_3033.trc  (incident=36666):
ORA-04031: unable to allocate 3952 bytes of shared memory ("shared pool","SELECT ","pacdHds_kkpaco","kggec.c.kggfa")
Incident details in: /u01/app/oracle/diag/rdbms/jasper/jasper/incident/incdir_36666/jasper_dw01_3033_i36666.trc
Wed Feb 16 04:26:47 2011
Dumping diagnostic data in directory=[cdmp_20110216042647], requested by (instance=1, osid=31713), summary=[incident=36578].
...

Trace files
-----------
Not provided

Incident trace files
--------------------

jasper_dw01_3033_i36666.trc

*** ACTION NAME:(SYS_IMPORT_TABLE_03) 2011-02-16 04:26:47.535

Dump continued from file: /u01/app/oracle/diag/rdbms/jasper/jasper/trace/jasper_dw01_3033.trc
ORA-04031: unable to allocate 3952 bytes of shared memory ("shared pool","SELECT ","pacdHds_kkpaco","kggec.c.kggfa")

========= Dump for incident 36666 (ORA 4031) ========

*** 2011-02-16 04:26:47.535
dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0)
----- Current SQL Statement for this session (sql_id=4ujz53z0x60rn) -----
INSERT /*+ SYS_DL_CURSOR */ INTO RELATIONAL("GDR"."AVG_ARH" NOT XMLTYPE) PARTITION ("D110120_22") ("TIMESTAMP","TEID","DST_IP","DST_PORT","SRC_IP","SRC_PORT","BYTES") VALUES (NULL,NULL,NULL,NULL,NULL,NULL,NULL)
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
0x3614e5dd0        58  package body SYS.KUPD$DATA_INT
0x361a817d0      3443  package body SYS.KUPD$DATA
0x3647ec9f0     14258  package body SYS.KUPW$WORKER
0x3647ec9f0      4535  package body SYS.KUPW$WORKER
0x3647ec9f0      9096  package body SYS.KUPW$WORKER
0x3647ec9f0      1688  package body SYS.KUPW$WORKER

---> HEAP DUMP heap name="SQLA^c1d302f4"  desc=0x75dfc6b0
             Type           Count             Sum         Average
             ~~~~           ~~~~~             ~~~         ~~~~~~~
         freeable              30           47528         1584.27
         recreate               1            4056         4056.00
             perm               1              80           80.00
             free               1            1040         1040.00

BreakDown
~~~~~~~~~
             Type           Count             Sum         Average Percent
             ~~~~           ~~~~~             ~~~         ~~~~~~~ ~~~~~~~
  TCHK^c1d302f4                12           48672         4056.00  92.35
  perm                          1              80           80.00   0.15
  Free(heap.awk)                1            1040         1040.00   1.97
...
Total = 52704 bytes           51.47k            0.05MB

Descriptor 36de851e8 was the largest with size 48672
This is 92.35 % of the total heap
ds=0x36de851e8 has size    44616 (% of heap=84.65)
Memory used by descriptors with more than 10240 bytes:
Total = 44616 (% of heap=84.65)
Total PERMANENT memory actually used is 80
Largest CONTIGUOUS free memory (NORMAL)   was       1040 (     1.02k)
Largest descriptor count was 12

---> HEAP DUMP heap name="KGLH0^c1d302f4"  desc=0x381acb728
             Type           Count             Sum         Average
             ~~~~           ~~~~~             ~~~         ~~~~~~~
             perm               2            2648         1324.00
             free               1             776          776.00
         freeable               4             608          152.00

BreakDown
~~~~~~~~~
             Type           Count             Sum         Average Percent
             ~~~~           ~~~~~             ~~~         ~~~~~~~ ~~~~~~~
  perm                          2            2648         1324.00  65.67
  Free(heap.awk)                1             776          776.00  19.25
  kgltbtab                      4             608          152.00  15.08

Total = 4032 bytes            3.94k            0.00MB

Total PERMANENT memory actually used is 2464
Largest CONTIGUOUS free memory (NORMAL)   was        776 (     0.76k)

Free List Bucket Summary :
Bucket   0 [size=0         ] Count=    2 Av.Size=       388 Max=       776

Opatch
------
There are no Interim patches installed in this Oracle Home.

RDA
----
db_cache_size                0
shared_pool_size        0
streams_pool_size 234881024
memory_target      13555990528

Minimum and Maximum Component Final Size
Component        Lowest        Low (MiB)  Highest High (MiB)
DEFAULT buffer cache 1375731712 1312   2717908992 2592
java pool 67108864 64 67108864 64
large pool 33554432 32 67108864 64
shared pool 2382364672 2272 2919235584 2784
streams pool 234881024 224 301989888 288


Trace files
-----------

Trace file jasper_dw01_3033.trc not provided.

jasper_dw01_3033_i36666.trc

---> HEAP DUMP heap name="SQLA^c1d302f4"  desc=0x75dfc6b0

BreakDown
~~~~~~~~~
              Type           Count             Sum         Average Percent
              ~~~~           ~~~~~             ~~~         ~~~~~~~ ~~~~~~~
   TCHK^c1d302f4                12           48672         4056.00  92.35
   Free(heap.awk)                1            1040         1040.00   1.97

Total = 52704 bytes           51.47k            0.05MB

Descriptor 36de851e8 was the largest with size 48672
This is 92.35 % of the total heap
ds=0x36de851e8 has size    44616 (% of heap=84.65)
Memory used by descriptors with more than 10240 bytes:
Total = 44616 (% of heap=84.65)
Total PERMANENT memory actually used is 80
Largest CONTIGUOUS free memory (NORMAL)   was       1040 (     1.02k)
Largest descriptor count was 12

This does not include a complete heapdump.

alter system set events ‘4031 trace name heapdump level 536870914’;
reproduce the problem and provide the next generated trace files so that we can check the complete memory allocation when the problem is raised?

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

Primary Issue:
Unexpectedly High Subpool Allocation in Shared Pool

The issue could occur if in the "Memory Utilization of Subpool" sections of your the trace file, largest allocation size over all subpools in total is NOT one of the following expected names:

"free memory",
"sql area",
"SQLA",
"library cache",
"KGH: NO ACCESS",
"ges resource",
"gcs resource",
"ksfd.*I/O",
"*db_block_buffers*",
"*pcur*",
"*ccur*",

Another condition that this issue could occur is that if "free memory" is the largest, check whether the second largest allocation name is NOT in the above list,

Another condition that this issue could occur is that the top allocation is one of the following, and its allocation size is above 50% of the total subpool size:

"sql area", "SQLA", "library cache", "*pcur*", "*ccur*".

Certain areas of the Shared Pool tend to grow aggressively and stabilize. Areas associated with the Library Cache and cursor objects for example. In your case, Further investigation is required to diagnose the large memory allocations in your Shared Pool that do not match up with expected areas of growth, and it would provide better information for the cause of ORA-04031.
By analyzing the uploaded file, we have found the following symptoms that may have caused the issue:

    ** In your trace file, Top 5 Allocation in all subpools:
    AllocationName........Size
    KGLH0........58063984 bytes
    private strands........33911808 bytes
    event statistics per s........29735936 bytes
    ksunfy : SSO free list........27718400 bytes
    dbktb: trace buffer........24576000 bytes


Recommended Solution

1. Please create a new Service Request to further investigate the issue. Provide the following diagnostics with the new SR:

a) Review NOTE:430473.1 - ORA-4031 Common Analysis/Diagnostic Scripts [Video]

b) Look in the section of the article titled 'Software Requirements/Prerequisites'. You can download the zip file clicking on the 'Click here' link. Run the scripts below and provide the output for analysis

TrendSGAstats.sql -- spools output to trends.out (run on 10g and 11g)
ReservedAnalysis.sql -- spools output to reserved.out (runs on 8i and higher)

2) Upload the diagnostics output from these scripts as well as an AWR report for the hour time frame prior to the ORA-4031 errors with your new Service Request.

你可能感兴趣的:(ORA-4031错误原理及诊断脚本汇总)