为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:Windows
【CPU】:
【问题描述】*:生产环境发现了一个问题,从bad connection排查到timeout,到现在的锁等待,,上面是会话,事务和锁的对应关系,
上面是等待的事务。如图这里有一个select的事务(options表)在等待另外一个insert事务(documents表)释放IX锁。但是很奇怪一个select的操作要获取X锁,另外按理说这两个是不同的表,不应该互相影响。
看看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';
--使用结果集的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);

希望能给解决方案,select为什么会需要X锁。我这select是insert前做的检查操作。而且为什么options表的X锁,需要等待模式上的IX锁,这不是纯无用操作吗?