一、锁等待
方法1
1.1 查询正在运行的事务
SELECT SESS_ID,SQL_TEXT,STATE FROM V$SESSIONS WHERE SESSID IN (select SESS_ID from v$trx where status='ACTIVE');
1.2 通过SESS_ID关闭会话 delete(会话过多无法判断请采用“方法二”)
SP_CLOSE_SESSION(142344256);
如果是MPP环境,以下命令需要在MPP多个节点同时进行执行:
./disql 用户名/密码#{MPP_TYPE=local} --注意:MPP集群需要local登录 SP_SET_SESSION_LOCAL_TYPE (1); ---允许MPP主备执行DDL操作 SP_CLOSE_SESSION(142344256);
关闭后,此会话会显示网络通信异常
再次查询只能看见update语句会话
方法2:
2.1 查看被堵塞的事务
(事务ID:TRX_ID)
SELECT VTW.ID AS TRX_ID, VS.SESS_ID ,VS.SQL_TEXT ,VS.APPNAME ,VS.CLNT_IP FROM V$TRXWAIT VTW LEFT JOIN V$TRX VT ON (VTW.ID=VT.ID) LEFT JOIN V$SESSIONS VS ON (VT.SESS_ID=VS.SESS_ID);
2.2 查询被阻塞的事务是由哪个事务造成的阻塞
(等待事务ID:WAIT_FOR_ID)
SELECT WAIT_FOR_ID,WAIT_TIME FROM V$TRXWAIT t WHERE ID=146479;
2.3 通过等待事务ID定位到会话以及执行的语句
SELECT VT.ID AS TRX_ID,VS.SESS_ID,VS.SQL_TEXT ,VS.APPNAME ,VS.CLNT_IP FROM V$TRX VT LEFT JOIN V$SESSIONS VS ON (VT.SESS_ID=VS.SESS_ID) WHERE VT.ID = 146457;
2.4 SP_CLOSE_SESSION关闭等待事务(SESS_ID)
无现象结果
再次查询 无堵塞会话