错误内容:ORA-04030: 在尝试分配 8389132 字节 (pga heap,redo read buffer) 时进程内存不足
错误的一般原因:
1、主机内存限制,包括windows 32上得1.7G限制
2、系统用户的shell限制,一般都是AIX上得/etc/security/limits中 data设置不够大。
3、pga设置过小,无法创建连接。
4、pga过小导致每个进程可以使用的pga内存过小
设置了PGA_AGGREGATE_TARGET以后,每个进程PGA内存的大小也是受限制的:
o 串行操作时,每个进程可用的PGA内存为MIN(PGA_AGGREGATE_TARGET * 5%, _pga_max_size/2),其中隐含参数_pga_max_size的默认值是200M,同样不建议修改它。
o 并行操作时,并行语句可用的PGA内存为PGA_AGGREGATE_TARGET * 30% / DOP (Degree Of Parallelism 并行度)。
案例:
操作系统:windows 2003 32bit
oracle: 9208
问题描述:
1、在将数据库从9201升级到9208之后,应用连接数据库不稳定,有时会连接失败。
2、查看数据库告警日志,数据库启动后半小时左右开始报如下错误:
Fri May 10 09:51:45 2013
Errors in file d:\oracle\admin\lssgsj\udump\lssgsj_ora_3964.trc:
ORA-04030: 在尝试分配 8389132 字节 (pga heap,redo read buffer) 时进程内存不足
Fri May 10 09:52:38 2013
Errors in file d:\oracle\admin\lssgsj\udump\lssgsj_ora_3284.trc:
ORA-04030: 在尝试分配 8389132 字节 (pga heap,redo read buffer) 时进程内存不足
处理过程如下:
1、之前在升级数据库到9208时,将java pool 增大到了150M,此时将其改回原来的16M,重启数据库后仍然会报4030错误。
2、考虑到windows 32位上内存限制,检查数据库内存配置:db_cache_size为900M,shared_pool为150M,PGA为400M;
降低db_cache_size大小到700M,增大PGA到500M,重启数据库后仍然报错。
3、降低SGA_MAX_SIZE,从1.2G修改为1G,并再次降低db_cache_size到500M,增大PGA到800M,重启数据库后没有在发生4030错误。