by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

4.6 Foreign Key를 이용한 Converters리스트 테스트




앞선 테스트를 통해 parent와 child 테이블에 대한 DML 순서에 따른 TM Lock 경합 발생 여부에 대해 살펴보았음

Converters 리스트 활용테스트

<<Session #134>>

--object ID확인
SQL> select object_name,object_id from dba_objects where object_name in ('PARENT','CHILD');
OBJECT_NAME      OBJECT_ID  
---------------- -----------
CHILD                  59054
PARENT                 59052

2 rows selected.
SQL> insert into child values(3,'c3',3);

SQL> select *from v$lock where sid in(136,134);
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
000007FF479F3EE8 000007FF479F3F10 134 TM 59052 0 2 0 72 0
000007FF479F3FE8 000007FF479F4010 134 TM 59054 0 3 0 72 0
@chk_lock
SQL> select a.sid,b.object_name,a.type,a.id1,a.id2,a.lmode,a.request,a.block
from v$lock a, dba_objects b
where a.sid in(134,136)
and  a.type ='TM'
and a.id1=b.object_id(+)
order by sid;
SID OBJECT_NAME TY ID1 ID2 LMODE REQUEST BLOCK
134 CHILD TM 59054 0 3 0 0
134 PARENT TM 59052 0 2 0 0

child 테이블에대해서는 RX(3) 모드로 Parent 테이블에대해서는 RS(2)모드로 TM락 소유

<<Session #136>>
insert into child values(3,'C3',3);
@chk_lock
SID OBJECT_NAME TY ID1 ID2 LMODE REQUEST BLOCK
134 PARENT TM 59052 0 2 0 0
134 CHILD TM 59054 0 3 0 0
136 CHILD TM 59054 0 3 0 0
136 PARENT TM 59052 0 2 0 0

134,136세션 각각 child 테이블에 대해서는 RX(3) mode로 Parent 테이블에 대해서는 RS(2)모드로 TM락을 소유

<<Session #134>>
delete parent where id = 4;

이때 134번세션에서 parent 테이블에대한 delete 작업을 하게 될 경우 ,134번세션은 child 테이블에 대해 S(4)모드의 TM락이 필요
그러나 이미 134번세션은 child 테이블에대해 RX(3)모드의 TM락을 소유중
이러한 경우 134번세션은 기존 RX(3)모드의 TM락을 릴리즈한 후에 다시 S(4) 모드로 TM락을 요청할수 없으므로 Lock Conversion을 수행
즉 기존의 RX+S=SRX(5)모드의 TM락을 획득시도
chk_lock결과를 확인해보면 이렇게 lock conversion이 필요한 경우 WAT(Waiters)리스트가아닌 CON(Convers)리스트에서 대기세션을 관리

@chk_lock
SID OBJECT_NAME TY ID1 ID2 LMODE REQUEST BLOCK
134 PARENT TM 59052 0 3 0 0
134 CHILD TM 59054 0 3 5 0
136 CHILD TM 59054 0 3 0 1
136 PARENT TM 59052 0 2 0 0

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.