달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2010. 7. 16. 19:11

Transaction - Enqueue DataBase이야기2010. 7. 16. 19:11

enqueue리소스란 enqueue 락을 위해 사용되는 데이터베이스 리소스이다. 
오라클은 enqueue리소스 관리를 위해 X$KSQRS 메모리 구조를 사용하며, V$RESOURCE뷰를 통해 확인이 가능.

enqueue리소스 구조는 락 유형과 두 개의 식별자로 구성된다. 두 개의 식별자는 각각 ID1, ID2 이다.<TYPE-ID1-ID2>의 구성은 데이터베이스에서 유일한 값을 가지게 되며, 이것을 enqueue identifier라고 한다. 또한 각 enqueue 리소스에는 enqueue lock를 관리하기 위한 3개의 링크드 리스트를가지고 있다.

enqueue Lock이란
X$KSQEQ(kernel service enqueue object) 메모리 구조를 사용하며, V$enqueue_lock 뷰를 통해 확인이 가능하다.

VIEW_DEFINITION
select s.inst_id,l.addr,l.ksqlkadr,s.ksusenum,r.ksqrsidt,         r.ksqrsid1,r.ksqrsid2, l.ksqlkmod, l.ksqlkreq,l.ksqlkctim,l.ksqlklblk
from x$ksqeq l,x$ksuse s,x$ksqrs r where l.ksqlkses=s.addr and  bitand(l.kssobflg,1)!=0 and (l.ksqlkmod!=0 or l.ksqlkreq!=0) and  l.ksqlkres=r.addr;

3 0 15201 0
2 0 15211 0
2 0 15223 0
1 0 15223 0
6 0 15211 0
4 0 15205 0
4 0 15208 0
4 0 15208 0
순서대로 , <LMOE - REQUEST - CTIME - BLOCK> 이라고 볼 수 있다.
LMODE - Lock 소유 모드
Request - 락 요청 모드
ctime - 요청 시점부터 경과한 시간
block  - 다른 락을 블로킹 하는지의 여부를 나타내는 블로킹 프래그

x$ksqeq.ksqlkres = x$ksqrs.addr과 결합하여 V$Enqueue_lock에서 보여준다.
enqueue리소스의 Type-ID1-ID2와 enqueue락의 <LMOE - REQUEST - CTIME - BLOCK>를 보여준다.

sql > select * from V$RESOURCE where type in ('TX','TM');
ADDR     TYPE ID1                    ID2                    
-------- ---- ---------------------- ---------------------- 
3306F2E0 TM   55726                  0                      
33070D78 TX   196631                 2276   

두 개의 리소스 생성.

select * from V$enqueue_lock where type in ('TX','TM');

not selected;

하나도 안 생김.

select * from v$transaction_enqueue

ADDR     KADDR    SID                    TYPE ID1                    ID2                    LMODE                  REQUEST                CTIME                  BLOCK                  
-------- -------- ---------------------- ---- ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- 
32BBC74C 32BBC770 151                    TX   196631                 2276                   6                      0                      220                    0                      

리소스 하나 생김.
이 뷰에는 < TX   196631 2276 > 리소스를 사용하는 락<6-0-220-0>이 한개 존재한다.

결론, enqueue 대기현상이 발생하지 않는다면 x$KSQEQ 메모리 구조에 저장되지 않는다.



'DataBase이야기' 카테고리의 다른 글

Transaction - Block layer  (0) 2010.07.22
Transaction-BlockLayer  (0) 2010.07.19
Transaction-Undo  (0) 2010.07.16
Transaction001  (0) 2010.07.13
'10.03.20 story  (0) 2010.04.01
:
Posted by НooпeУ


Code Start Code End