Oracle进程占用资源过大导致系统缓慢的问题

    记得有一次EBS系统运行非常缓慢,用户的请求都不能及时的响应。首先检查了操作系统进程,发现有几个Oracle进程占用资源非常高,当时怀疑是并发连接数太多。临近中午系统状态依然没有好转,重启Apache,访问速度暂时恢复了正常,十几分钟后问题又重现了。
    通过SQL反查语句,查询到资源占用异常的Oracle进程,再通过Oracle进程查询到了SQL语句,最后开发人员对SQL语句进行优化,提高了SQL语句执行效率。最后系统运行速度恢复正常。
 
处理方法如下,请大家参考。
 
1、首先查看AIX系统进程,发现PID为1852056的进程资源占用居高不下,怀疑1852056就是造成系统缓慢的罪魁祸首!现在迫切的想知道1852056到底在干什么?
 
2、从上图可以看到PID 1852056属主是oraprod(Oracle用户),需要通过PID 1852056来反查一下Oracle SID 。查询语句:
select s.username,s.sid,s.serial# from v$session s ,v$process p
where s.paddr=p.addr
and p.spid= 1852056
通过上面的语句查询到PID 1852056对应SID 445, 这时候1852056具体干的工作还没有表现出来,顺藤摸瓜,接着往下找。
 
 
3、 接下来通过SID 445来查询正在执行的SQL语句。
查询语句:
select t2.sid, t2.serial#, t3.sql_text
from v$session t2, v$sqltext t3
where t2.sid in (445)
and t2.sql_address = t3.address
查询到SID 445正在执行的SQL语句,为什么此程序占用资源这么高呢? 这时候就需要跟程序员沟通,优化SQL代码。
 
 
4、如果确定终止SID 445对其它应用没有影响,那么就可以直接在OS层Kill -9将1852056杀掉。当杀掉PID 1852056被占用的系统资源就会释放掉。
 

你可能感兴趣的:(sql,OS,kill,pid,sid)