본문 바로가기
다른 DBMS/Tibero

Tibero Lock Session 해결 및 정리

by 취미툰 2020. 9. 18.
반응형

티베로 운영중 DML Lock이 걸려있어서 시스템이 Hang이 걸렸었습니다.

걸려있는 Session을 kill하는 작업을 수행했는데, Oracle과 다른 표현에 헷갈렸었습니다..

 

그래서 이번기회에 티베로 lock 관련 테이블과 어떤식으로 확인하면 되는지 등을 정리하는 글을 포스팅하려고 합니다.

 

티베로 6기준

Lock과 관련된 딕셔너리뷰

3가지 테이블이 있습니다. GV뷰는 Global 관련된 뷰이기 때문에 V$LOCK과 V$BLOCKER_SESSION 두개의 테이블을 주로 보면 될것 같습니다.

 

SQL>select * from dict where table_name like '%LOCK%'

V$BLOCKER_SESSION : Displays blocker sessions which are not blocked by other session.
V$LOCK : Displays locks that are currently in use.
GV$LOCK : A synonym for GV$LOCK.

 

테스트

세션2개를 열어 의도적으로 Lock을 발생후 해당 테이블들에 어떤 값들이 보이는지 확인하기

 

세션1

SQL> update emp set sal=9999 where empno=7788;

1 row updated.

 

세션2

SQL> update emp set sal=1111 where empno=7788;

(락 걸린상태)

 

세션3

BLOCKER_SESSION 뷰 확인

64번 세션이 WLOCK_TX를 발생시키며 트랜잭션의 진행을 막고(BLOCKER)있는 모습을 확인할 수 있습니다.

(제가 이뷰의 존재를 포스팅하면서 알았습니다..이슈발생시알았다면 더 빠른 대처가 가능했을텐데..ㅠ) 

sid type          id1       id2  MODE_HELD

-------------------------- ------ ---------------
64 WLOCK_TX 458812 313  5

 

V$LOCK뷰 확인

 

v$lock은 위의 뷰보다 좀더 복잡하게 되어있습니다. 제가 확인한걸로는 WLOCK_TX락 기준으로 LMODE=0인 값이 BLOCKER_SESSIOn에서 나온 LOCK을 점유하고 있는 세션이고 REQUESTED=0인 값이 현재 요청을 대기중인 세션입니다.   


SQL> select * From v$lock where type= 'WLOCK_TX'  /

TYPE                             ID1        ID2      LMODE  REQUESTED    SESS_ID
------------------------- ---------- ---------- ---------- ---------- ----------
     CTIME
----------
WLOCK_TX                      524302        315          0          6         64
      4621

WLOCK_TX                      720923        315          5          0         64
      4621

WLOCK_TX                      524302        315          5          0         65
     13553


3 rows selected.

 

해당 세션 발견시 alter system  kill session (sid,serial#);로 세션을 죽여버리면 Lock이 풀리게 되고 작업이 Hang된것이 다시 진행된것을 확인할 수 있습니다.

 

 

 

반응형

댓글