Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8350858
  • 博文数量: 444
  • 博客积分: 10593
  • 博客等级: 上将
  • 技术积分: 3852
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-09 15:26
文章分类

全部博文(444)

文章存档

2014年(1)

2013年(10)

2012年(18)

2011年(35)

2010年(125)

2009年(108)

2008年(52)

2007年(72)

2006年(23)

分类: Oracle

2010-02-09 10:41:22

记得有一次EBS系统运行非常缓慢,用户的请求都不能及时的响应。首先检查了操作系统进程,发现有几个Oracle进程占用资源非常高,当时怀疑是并发连接数太多。临近中午系统状态依然没有好转,重启Apache,访问速度暂时恢复了正常,十几分钟后问题又重现了。
    通过SQL反查语句,查询到资源占用异常的Oracle进程,再通过Oracle进程查询到了SQL语句,最后开发人员对SQL语句进行优化,提高了SQL语句执行效率。最后系统运行速度恢复正常。
 
处理方法如下,请大家参考。
 
1、首先查看AIX系统进程,发现PID为1852056的进程资源占用居高不下,怀疑1852056就是造成系统缓慢的罪魁祸首!现在迫切的想知道1852056到底在干什么?
运行
topas
 
 
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被占用的系统资源就会释放掉。
 
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://itserverlive.blog.51cto.com/970886/268111
阅读(4509) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-02-09 11:03:12

今天刚明白,oracle数据库在执行sql的时候会产生oracle+dbservername的进程,产生的进程会在v$process里面进行登记,执行结束后注销掉,如果是执行的sql时间较长,那在v$session里面查询对应的sid,然后去v$sqltext查询对应的sql语句