为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:Windows
【CPU】:
【问题描述】*:生产环境发现了一个问题,从bad connection排查到timeout,到现在的锁等待,,上面是会话,事务和锁的对应关系,
上面是等待的事务。如图这里有一个select的事务(options表)在等待另外一个insert事务(documents表)释放IX锁。但是很奇怪一个select的操作要获取X锁,另外按理说这两个是不同的表,不应该互相影响。
年后跑一遍又不太一样了,显示都是意向锁,但依然会出现wait,不懂......
2.24更新:
排查到是第一个事务给options表加了X锁,第二个事务加IS锁时就等待导致死锁。但是我通过V$SQL_HISTORY查看第一个事务执行的sql语句,并没有对options表加锁或者执行写操作。这个事务里只有两条sql,一条是insert documents,一条是select options。但是这个X锁又归属于这个事务......
--使用结果集的SQL清除
SELECT 'SP_CLOSE_SESSION('||SESS_ID||');' FROM V$SESSIONS WHERE TRX_ID IN (SELECT WAIT_FOR_ID FROM V$TRXWAIT);
SELECT 'SP_CLOSE_SESSION('||SESS_ID||');' FROM V$SESSIONS S, V$LOCK L WHERE S.TRX_ID = L.TRX_ID AND L.BLOCKED = 1;
--或者根据SESS_ID清除
SP_CLOSE_SESSION(SESS_ID);
--如果清除不掉,先取消,再清除
SP_CANCEL_SESSION_OPERATION(SESS_ID);
SP_CLOSE_SESSION(SESS_ID);

看看options表是否有未提交的事务
select t1.user_name, t1.sess_id, t1.sql_text, t1.state, t1.trx_id, T2.INS_CNT, T2.DEL_CNT, T2.UPD_CNT from v$sessions t1, v$trx t2 where t1.trx_id=t2.id and t1.state='IDLE' AND T2.STATUS='ACTIVE';