oracle阻塞查询,如何查找产生阻塞的SQL?

如何查找产生阻塞的SQL?

测试:

session1: 执行: select * from test_doindex where id=1 for update;

此时调整之后不做提交也不回退,并打开多个session,并执行相同的SQL,使其产生锁等待,

如下:

session2: 执行: select * from test_doindex where id=1 for update;

session3: 执行: select * from test_doindex where id=1 for update;

session4: 执行: select * from test_doindex where id=1 for update;

session5: 执行: select * from test_doindex where id=1 for update;

session6: 执行: select * from test_doindex where id=1 for update;

此时查询dba_waiters,可以发现

WAITING        HOLDING        LOCK_TYPE        MODE_HELD        MODE_REQUESTED        LOCK_ID1        LOCK_ID2

137        138        Transaction        None        Exclusive        196640        427

138        139        Transaction        None        Exclusive        196640        427

137        139        Transaction        None        Exclusive        196640        427

154        140        Transaction        Exclusive        Exclusive        196640        427

141        140        Transaction        Exclusive        Exclusive        196640        427

137        140        Transaction        Exclusive        Exclusive        196640        427

154        141        Transaction        None        Exclusive        196640        427

141        141        Transaction        None        Exclusive        196640        427

此时可以通过HOLDING的SID找到session 140,但此时v$session里SQL_ID已经为空。

无法查到当生锁等待的session究竟是在执行什么SQL语句?那当然对应的open_courr也未能查到,

请问那位高人有好的方法可以指点一二?

持有锁的session未能提交或回退,status已变为inactive,无法查到当前SQL,而上一条SQL明显也不是产生锁等待的SQL。

如何找出,产生锁的SQL呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值