产生这种等待事件的原因有以下几种:
1、不同的session更新或删除同一条记录;
2、唯一索引有重复索引;
3、位图索引同时被更新或同时并发的向位图索引字段上插入相同的字段值;
4、并发的对同一个数据块上的数据进行update操作;
5、等待索引块分裂完成
分析:
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/