ORA-04031:當分配大塊的連續的內存時不足時出現,很多時候是因為內存碎片過多,而并非內存不足造成。oracle首先會清除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%';
我的方法找出多次沒有綁定變量的sql:查前20個字符相同的SQL_TEXT V$SQL
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25583515/viewspace-711023/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25583515/viewspace-711023/