在检查日志时,发现了一个错误
ORA-04030: out of process memory when trying to allocate .....。 经分析,每当处理非常大的事务时,就会发生,于是开始对这个大事务进行跟踪,sql如下:
select value from v$pgastat;
select value from v$sysstat;
select pga_allocated from v$session
发现当v $sysstat.value 达到4G 的时候,就会报错,检查sql, 发现cursor 产生的大量数据需要放到一个local variable 的table 中,而这超出了ulimit stack size。
最终解决方案是加上limit 以减少PGA 内存使用。
OPEN CURSOR cur
LOOP
FETCH cur BULK COLLECT INTO tbl limit v_rows;
..........
EXIT WHEN cur%NOTFOUND;
END LOOP;
CLOSE cur;
select value from v$pgastat;
select value from v$sysstat;
select pga_allocated from v$session
发现当v $sysstat.value 达到4G 的时候,就会报错,检查sql, 发现cursor 产生的大量数据需要放到一个local variable 的table 中,而这超出了ulimit stack size。
最终解决方案是加上limit 以减少PGA 内存使用。
OPEN CURSOR cur
LOOP
FETCH cur BULK COLLECT INTO tbl limit v_rows;
..........
EXIT WHEN cur%NOTFOUND;
END LOOP;
CLOSE cur;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/283126/viewspace-1350185/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/283126/viewspace-1350185/