4031我两年遇到了不下5次,现在总结下下
4031错误是SHARED_POOL很容易产生的错误,对于SHARED_POOL的原因一般有3类:
BUG
SHARED_POOL太小
SHARED_POOL有太多的碎片
对于LARGE POOL,JAVA POOL,一般是由于设置的太小导致到
BUG可以从Doc ID: 396940.1 中查询
SHARED_POOL太小,可以通过监控v$sgastat查看free memory是否过少,或者在04031发生后生成的DUMP中也可以查看到
SHARED_POOL有太多的碎片,这个可以通过x$ksmsp来分析,或者是04031发生后的DUMP
如何来减少04031错误了
1.10G的SGA自动管理
2.定期flush SHARED_POOL
3.不要设置过高的session_cache_cursor
4.使用绑定变量
5.当没有使用绑定变量而且cursor_sharing=similar时,一定不要收集直方图
6.加大SHARED_POOL_RESERVED_MIN_ALLOC的空间,保留空间也可能发生04031,具体诊断是监控v$shared_pool_reserved
7.把一些大的对象PIN到SHARED_POOL中
对于碎片造成的04031,一般的原因是没有使用绑定变量的SQL和大量的硬解析
查找的方法一般有
v$sqlarea中基本相同的SQL
v$sqlarea中version_count异常高的SQL
通过v$open_cursor和v$sqlarea查询当前占用内存高的SESSION,在获得该SESSION的SQL分析(还方法不适合于存在version_count异常高的情况)
DUMP library_cache 来分析SQL硬解析的SQL
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8242091/viewspace-586914/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8242091/viewspace-586914/