2017年(38)
分类: Oracle
2017-12-07 13:48:12
ORA-04031:當分配大塊的連續的內存時不足時出現,很多時候是因為內存碎片過多,而并非內存不足造成。首先會清除shared pool中當前沒有使用的對象,使空間合并,如果仍然沒有足夠大的單塊內存可以滿足需要,就會發生04031
案例: 2011/10/26 Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
+Red Hat Enterprise Linux AS release 4 (Nahant Update 5)
用戶程序突然ORA-04031:無法分配共享記憶體的4072位元組()
SELECT free_space, avg_free_size,used_space, avg_used_size,request_failures, last_failure_size FROM v$shared_pool_reserved;
FREE_SPACE|AVG_FREE_SIZE|USED_SPACE|AVG_USED_SIZE|REQUEST_FAILURES|LAST_FAILURE_SIZE
155403224|226205.566229985|10824904|15756.7743813683|5170|432
看到有請求失敗,最后一次失敗大小位432<4400(_shared_pool_reserved_min_alloc)
SELECT * FROM X$KSPPCV A,X$KSPPI B WHERE A.INDX=B.INDX AND B.KSPPINM = '_shared_pool_reserved_min_alloc'
查看數據庫parse count (hard)和parse count (total)的比例:
select name,value from v$sysstat where name like 'parse%';
我的方法找出多次沒有綁定變量的:查前20個字符相同的SQL_TEXT V$SQL