初次遇见等待事件:enq;tx-row lock contention

该事件排在top 10的第二位,也就是说系统中在这1小时里出现了严重的行级锁等待事件。


产生这种等待事件的原因有以下几种:

           1、不同的session更新或删除同一条记录;

           2、唯一索引有重复索引;

           3、位图索引同时被更新或同时并发的向位图索引字段上插入相同的字段值;

           4、并发的对同一个数据块上的数据进行update操作;

           5、等待索引块分裂完成


分析:


     可在AWR中的segment by row lock waits章节中看到 row lock waits发生在一个表上,并且在sql order by Elapsed time中排在第一位的sql是一个DML(update)语句,仅60分钟共执行了925次。所以考虑原因应是并发的对同一数据块上的数据进行update操作所导致的。

    Sql id : g8vj3a677p9c1

    Sql:

            /* update dao.storage.model.DynamicInventoryQuantity */ update wxdms.BJM12 set BJZWMC=:1 , JJCKDM=:2 , JJCKID=:3 , JJCKJC=:4 , JJDSRQ=:5 , JJDSSJ=:6 , JJKZDM=:7 , JJKZID=:8 , JJKZJC=:9 , JJSLDM=:10 , JJSLID=:11 , JJSLLX=:12 , JJWPSL=:13 , WXGYBM=:14 , WXGYID=:15 , WXPJDM=:16 , WXPJID=:17 , XTCZRQ=:18 , XTCZRY=:19 , XTCZSJ=:20 , JJSLMC=:21 , KCPPAI=:22 , KCPPMC=:23 where JJDTID=:24


   解决方法:     

SQL> select sid,serial#,p1,event,blocking_instance,blocking_session from v$session where sql_id='g8vj3a677p9c1';————可根据sql id查看相对应的sid。


SQL> select sid,type,id1,id2,lmode,request,block from v$lock where type in('TX','TM');————查找出ID1列=事务槽号相同的sid。


SQL> select sid,sql_id,serial#,p1,event,blocking_instance,blocking_session from v$session where sid in(XX,XX)————查看会话及行级锁的相关信息。


SQL> alter system kill session 'XX,XX';————kill 阻塞的会话。


SQL> select sid,sql_id,serial#,p1,event,blocking_instance,blocking_session from v$session where sid in(XX,XX)————再次查看会话信息。


SQL> select sid,type,id1,id2,lmode,request,block from v$lock where type in('TX','TM');————查看是否还存在行级锁。


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

转载于:http://blog.itpub.net/31547381/viewspace-2168599/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值