앞선 테스트를 통해 parent와 child 테이블에 대한 DML 순서에 따른 TM Lock 경합 발생 여부에 대해 살펴보았음
h2.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 |