关于进程狂吃内存的问题


一个新库,表空间和用户等已建好,再用PL/SQL从别的库 导出表和索引,Sequences等,可以进行增删改查了。
出现问题:运行最多两天后,数据库实例DOWN掉。重起服务,数据库实例恢复。再运行两天,又down掉。
查找问题: 打开企业管理器,发现有错误警告。根据错误找到日志文件:      
      \app\Administrator\diag\rdbms\shichudb\shichudb\alert\log.xml
      发现里面狂报
      ORA-04030: 在尝试分配 968 字节 (kxs-heap-c,temporary memory) 时进程内存不足
      ORA-04030: 在尝试分配 968 字节 (kxs-heap-c,temporary memory) 时进程内存不足
      ORA-04030: 在尝试分配 1016 字节 (kxs-heap-w,kghsseg : kokeismo) 时进程内存不足
       这应该是PGA被耗尽的现象。于是先调整ORACLE内存配置:总内存改为1500M,SGA配成  
       800M。结果不行。试过几种内存配置方案,都失败。

       上网查资料,说是有可能是某个进程占用了大部分的PGA。

       select * from v$process where PGA_ALLOC_MEM > 20971520   
      查找PGA使用大于20M的进程,发现只有一个记录  

      select PID,USERNAME,PGA_USED_MEM from v$process where PGA_ALLOC_MEM >  20971520   
      查找出异常的PID=34  这个进程的PGA使用量一直在增长
   
    select sid,serial#,username,machine from v$session b where b.paddr=(select addr from v$process c where c.pid=34);
   根据查找到的PID=34 查找到SID=138
   
   用DBA身份察看V$SESSION 视图,看到SID是138的SESSION的STATUS一直是AVTIVE,是不是死锁了?


     select s.username,l.object_id,l.session_id,s.serial#,l.oracle_username,l.os_user_name,l.process from  
     v$locked_objectl,v$session s where l.session_id= s.sid;  
         查找死锁的进程,结果显示出来的是上面语句查找出来的SID=138  
            
      在V$SESSION 视图里看到这个SID=138的会话的PROGRAM 是OMS(ORACLE MANAGEMENT SERVER)
3.JPG

      到企业管理器里察看警告信息 
     
         发现最严重的是:
      BEGIN EMDW_LOG.set_context(MGMT_JOB_ENGINE.MODULE_NAME, :1); BEGIN   
          MGMT_JOB_ENGINE.update_step_status   (:2,:3,:4,:5); END; EMDW_LOG.set_context; END;

         SELECT EXECUTION_ID, STATUS, STATUS_DETAIL FROM MGMT_JOB_EXEC_SUMMARY WHERE JOB_ID = :B3 AND  
         TARGET_LIST_INDEX = :B2 AND EXPECTED_START_TIME = :B1

         执行这两个SQL语句是引发的堵塞严重,但是看不懂它们在执行什么。
        但是注意到里面都有JOB这个单词,猜是作业执行或调度的时候出问题了。到企业管理器里的作业定义里去找这两句
        ,没找到。
        试着把138会话的进程杀死 
         alter system kill session '138,7031';   
           杀完后,再查  
         select PID,USERNAME,PGA_USED_MEM from v$process where PGA_ALLOC_MEM >  20971520
         没有使用PGA大于20M的进程。
         可是。。。
         五分钟后,又出现了使用PGA大于20M的进程,在查查,又是死锁的会话。再杀,又出现。。。
         试了几次,我放弃了。
         把企业管理器的服务ORACLDBCONSOLEORAL停下试试,停了之后,再没有出现过。      
         这个问题解决过程到这里就停住了,还是上论坛求助吧。哪个大侠帮帮忙啊!!!!!!
         不能把那么重要的服务一直停下啊!!!!!
5.JPG

评分

参与人数 1金币 +50 收起 理由
iidba + 50 升级为注册会员

查看全部评分

标签: 暂无标签
雷洋

写了 1 篇文章,拥有财富 69,被 1 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

P4 | 发表于 2013-4-18 22:20:33
再补充一点,这个数据库一直没有其他的程序连接,只有developer,sqlplus或企业管理器连接它。所以可以排除是别的程序对表的增删改查出的问题。一定是企业管理器里出了问题。可真是看不出来问题在哪。请各位老师指教!
回复

使用道具

P4 | 发表于 2013-4-25 12:39:49
你的数据库什么版本,因为oracle 10.2.0.1 for linux的oem就存在问题,我们给质检总局就出现过,oem进程起了很多。是由于oraclebug 引起的。你看看你数据库什么版本,然后去metalink查询一下,应该打上补丁就可以了
回复

使用道具

P4 | 发表于 2013-5-28 11:28:07
我的数据库是11.1.0.6.0。我建的其它库 没有这个问题。但是这个库就出问题。
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈