|
达梦数据库session任务阻塞处理
前言:某次业务需要update更新时,发现执行卡住,遂进行以下排查
-- 查询阻塞ID
select * from v$TRXWAIT;
-- 精确查询阻塞ID的SQL
select
tw.*,
ss.CLNT_IP,
ss.SQL_TEXT
from
V$TRXWAIT tw
JOIN V$SESSIONS ss on ss.TRX_ID = tw.WAIT_FOR_ID
order by
WAIT_TIME desc;
-- 根据查询到的阻塞任务,查询对应的sess_id
select sess_id,trx_id,sql_text,state,clnt_ip
from V$SESSIONS
where trx_id='170858974';
-- 更精准的查询阻塞根任务的SESS_ID(其他阻塞任务都与根任务有关联,只要关闭根任务的session,则可以解决)
select sess_id,trx_id,sql_text,state,clnt_ip
from V$SESSIONS
where trx_id in (
select distinct wait_for_id
from V$TRXWAIT
where wait_for_id not in (select id from V$TRXWAIT)
);
-- 使用SYSDBA关闭对应的session(需使用SYSDBA权限)
-- 注意,关闭前请确认是否有重要数据事务修改了数据但未提交(COMMIT)或回滚(ROLLBACK)!!
CALL SP_CLOSE_SESSION('139758055019704');
CALL SP_CLOSE_SESSION('139757446368904');
CALL SP_CLOSE_SESSION('139757583976296');
CALL SP_CLOSE_SESSION('139757794590984');
CALL SP_CLOSE_SESSION('139758047678328');
|