ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 查找oacle锁问题

查找oacle锁问题

原创 Linux操作系统 作者:252207091 时间:2013-06-02 21:57:18 0 删除 编辑
       同事在测试环境做批量测试,通常都跑得很快,可是有次同事等了两三个小时,程序还是一直在跑着,就觉得很奇怪~~
     1、一开始我们怀疑是不是服务器的资源不足才跑这么慢,因为这服务器是多个项目组共用的,因此我们先查看服务器资源 vmstat,服务器的资源是正常的
     2、既然服务器的资源是正常的,那sql语句有问题的可能性就比较大了
          通过查找出后台运行的的进程号,再根据oracle视图查找该程序正在运行的语句
 
        select nvl(s.SQL_ADDRESS,s.PREV_SQL_ADDR),
                     nvl   (s.SQL_HASH_VALUE,s.PREV_HASH_VALUE)
           from v$session s,v$process p
         where s.PADDR = p.ADDR
             and p.PID = ?
       
         在通过
         select * from v$sqltext wher hash_value=?
     3、查看该语句,我们发现该语句的执行计划是正常的;
     4、这时,我们考虑到会不会该表被锁着呢
         (1)通过查看v$loced_object发现存在两个object_id一样,而且锁的模式都是一样的3,且该object_id就是我们正在执行语句的的表之一
         (2)通过sid查找v$lock中条件type='[tx'中查找这两被锁的记录发现
                  其中存在
               SID    LMODE      REQUEST    BLOCK
                  1           0                      6               0
                    2         6                      0              1
                这样就发现  会话sid 2正在阻塞其他会话,而会话1 正在等待一个LMODE=6的锁,被阻塞着。会话2阻塞者会话1
             这时,我们就查找下为什么会出现会话1呢?原来是其他同事刚好在修改该对象的数据,而没提交。
              这样,我们就把会话1给删掉,之后该程序就很快跑过了,不用3分钟就完了。
               alter system kill session 'sid,serial#'

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24242729/viewspace-762766/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-07-14

  • 博文量
    1
  • 访问量
    3341