[TIP] Lock 관련 정보 조회 0 0 3,076

by 업인더스카이 [ALTIBASE 노하우/팁/자료] [2011.10.18 09:59:48]



먼저 알티베이스의 lock 정보는 크게 두 performance view 를 조회해 보시면 됩니다.
v$lock, v$lock_statement 입니다.

먼저 v$lock 에서는 어떤 테이블에 대해 어떤 종류의 lock 이 걸려 있는지를 조회해 볼 수 있는데
select 문의라면 IS_LOCK, insert나 update, delete 등의 변경 작업 이라면 IX_LOCK 이 걸리게 됩니다.
이 뷰와 system_.sys_tables_ 메타 테이블을 조인 해서 테이블 이름과 lock 정보를 조회해 보실 수 있습니다.

select table_name , lock_desc
from system_.sys_tables_ a, v$lock b
where a.table_oid = b.table_oid;


또한 v$lock_statement 를 통해 lock 을 잡고 있는 쿼리를 확인할 수 있습니다.
v$lock 의 trans_id 와 v$lock_statement 의 tx_id 를 조인해서 lock 을 잡고 있는 쿼리를 조회해 보실 수 있습니다.

select query
from v$lock a, v$lock_statement b
where a.trans_id = b.tx_id;



여러 조인을 이용해서 현재 lock 을 잡고 있는 쿼리의 session id 를 확인 하실 수 있습니다.
desc v$lock;
desc v$lock_statement; 를 통해 어떤 컬럼을 가지고 있는지 확인해 보시기 바랍니다.
이렇게 얻어낸 session_id 를 가지고 해당 session 을 kill 할 수도 있습니다.
alter database session close ;
위 명령은 sysdba 로 들어가셔서 수행할 수 있습니다.
connect sys/manager as sysdba;



++ Lock wait query

select query, tx_id
from v$statement
where tx_id in ( select trans_id from v$lock_wait);



++ v$lock_wait 뷰를 기반으로 waiting 하는 tx_id, lock 부여 시간, 관련 REDO logfile 위치 등 조회.

select
id tx_id,
lw.wait_for_trans_id wait_tx_id,
decode (status,0,'BEGIN',
1,'PRECOMMIT',
2,'COMMIT_IN_MEMORY',
3,'COMMIT',
4,'ABORT',
5,'BLOCKED',
6,'END', 'UNKNOWN') status,
decode(update_status,0,'READ',1,'UPDATING','UNKNOWN') TTYPE,
decode(first_undo_next_lsn_fileno,-1,'READ_TRN',first_undo_next_lsn_fileno) firstlog,
base_time - decode(first_update_time, 0, base_time, first_update_time) time
from
v$transaction tx
left outer join v$lock_wait lw
on tx.id = lw.trans_id,
(select base_time from v$sessionmgr) base
where status != 6
order by time desc;



++ lock을 잡고 있는 client_pid 및 session_id를 확인

select a.table_oid, a.lock_desc, c.client_pid , b.session_id
from v$lock a, v$statement b, v$session c
where a.trans_id = b.tx_id
and b.session_id = c.id;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입