Chinaunix首页 | 论坛 | 博客
  • 博客访问: 547839
  • 博文数量: 128
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 1345
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-22 21:43
文章分类

全部博文(128)

文章存档

2009年(30)

2008年(98)

我的朋友

分类: Oracle

2008-09-12 14:49:54

今天操作数据库时,由于要进行大表与大表的连接,所以给sort_area_size和hash_area_size开了很大的内存,
导致出现了ORA-04030

alter session set workarea_size_policy = manual;
alter session set sort_area_size = 209715200;
alter session set hash_area_size = 524288000;

*
ERROR 位于第 1 行:
ORA-04030: 在尝试分配 1040896 字节 (hash-join subh,kllcqas:kllsltba)
时进程内存不足
ORA-06512: 在"LCMID.IBSS_TO_MID_NUMBER", line 461
ORA-06512: 在line 3

查了一下:
http://rollingpig.itpub.net/post/81/102600

ORA-04030: 在尝试分配 。。。字节 (hash-join subh,kllcqas:kllsltba) 时进程内存不足

ORA-04030:out of process memory when trying to allocate string bytes

下面分析了ORA-04030的出现原因及简单解决方法


ORA-04030出现的基本都是过多的使用memory造成的

Oracle process使用的内存数量是有一定限制的:

A. 对于32 BIT系统,有SGA 1.7G限制


B. 某些OS系统本身也有一些内存参数限制

--运行 ulimit 看看

C. OS系统本身物理内存+Swap的限制


我们应该检查DB使用的
SGA + PGA 是否超过 上面的限制

SGA 包括 db_cache,shared_pool,large_pool,java_pool
session的PGA包括
sort_area_size/Hash_area_size/*_area_size 或者 pga_aggregate_target
还有执行的CODE以及一些data也会占用空间。

然后再根据情况降低里面的某些值了,比如 db_cache, sort_area_size 等

如果是OS系统的某Limited造成的,可以考虑放开限制

man ulimit 看看如何放开限制……



改小了下:
alter session set sort_area_size = 104857600;
alter session set hash_area_size = 209715200;

阅读(3809) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~