操作系统:AIX 6 数据库: Oracle 10g RAC2 Node 内存:16G
我用toad或plsql工具打开一张40多万行数据的表正常,但是当我浏览对应视图(组合查询出来的视图,数据量40多万)中的数据,会出现:
ORA-04030: out of process memory when trying to allocate 258072 bytes(QERHJ hash joi,kllcqas:kllsltba)
我在客户端执行一个比较复杂的插入语句,也会出现ORA-04030错误,但是在Oracle服务器的sqlplus中执行正常。
在网上google了一番,大概是以下原因造成的:
ORA-04030的问题一般是PGA过度分配造成的(对应的操作是sort/hash_join)。在Oracle9i中pga_aggregate_target指定了所有session总共使用的最大PGA上限,
如果该值被设定了则默认的workarea_size_policy=auto, sort_area_size/sort_area_retained_size将被忽略。
那么直接减小pga_aggregate_target就能解决一部分ORA-04030问题。
A. 对于32 BIT系统,有SGA 1.7G限制
B. 某些OS系统本身也有一些内存参数限制
--运行 ulimit 看看
C. OS系统本身物理内存+Swap的限制
Oracle相关参数如下:
SGA:
NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
lock_sga
boolean FALSE
pre_page_sga
boolean FALSE
sga_max_size
big integer 6G
sga_target
big integer 6G
PGA:
NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target
big integer 762M
bash-3.2# lsattr -E -l sys0 -a maxuproc
maxuproc 128 Maximum number of PROCESSES allowed per user True
bash-3.2# chdev -l sys0 -a maxuproc=8192
sys0 changed
bash-3.2# lsattr -E -l sys0 -a maxuproc
maxuproc 8192 Maximum number of PROCESSES allowed per user True
执行完了,通过以下命令重启listener
srvctl stop listener -n nodename
srvctl start listener -nnodename
查询还是报ORA-04030错误