DM鎖等待解決辦法
阿新 • • 發佈:2022-05-18
一、鎖等待
方法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)
無現象結果
再次查詢 無堵塞會話