태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

10704 Event - Troubleshooting Enqueue Problem

오라클 2008.08.04 15:45
간혹 다음과 같은 질문을 할 때가 있다.

Oracle에서 특정 Operation을 수행할 때 어떤 Lock(Enqueue)를 어떤 순서로 잡는지 알고 싶은데요?

v$lock 뷰를 조회하거나 Wait가 발생하는 경우 v$session_wait 뷰 등을 조회할 수 있겠지만, 너무 제한적인 방법이다. 이들 뷰를 아무리 빨리 Query한다 해도 Lock에 대한 점유를 획득하고 해제하는 모든 과정을 알 수는 없다.

다행히 10704 Event를 이용하면 이런 요구 사항을 만족시킬 수 있다. 아래에 간단한 예제가 있다.

drop table t1 purge;
create table t1(c1 int);

@trace_on 10704 10

insert into t1 values(1);
commit;

@trace_off

@trace_file

ed &trace_file
위의 과정을 통해 출력된 Trace File은 다음과 같다. Trace File을 분석하면 다음과 같은 순서를 따르는 것을 알 수 있다.

  • CU 획득/해제
  • TM 획득
  • HW 획득/해제
  • FB 획득/해제
  • TX 획득
  • commit;
  • TX 해제
  • TM 해제
*** 2008-08-04 15:38:36.790
ksqgtl *** CU-70057210-00000000 mode=6 flags=0x10 timeout=300 ***
ksqgtl: no transaction
ksqgtl: use existing ksusetxn DID
ksqgtl:
	ksqlkdid: 0001-0012-00000008
*** 2008-08-04 15:38:36.837
*** ksudidTrace: ksqgtl
	ksusesdi:   0000-0000-00000000
	ksusetxn:   0001-0012-00000008
ksqgtl: RETURNS 0
*** 2008-08-04 15:38:36.852
ksqrcl: CU,70057210,0
ksqrcl: returns 0
*** 2008-08-04 15:38:36.852
ksqgtl *** TM-0000ff63-00000000 mode=3 flags=0x401 timeout=21474836 ***
ksqgtl: xcb=0x6F218758, ktcdix=2147483647, topxcb=0x6F218758
	ktcipt(topxcb)=0x0
*** 2008-08-04 15:38:36.852
ksucti: init txn DID from session DID 0001-0012-00000008
ksqgtl:
	ksqlkdid: 0001-0012-00000008
*** 2008-08-04 15:38:36.852
*** ksudidTrace: ksqgtl
	ktcmydid(): 0001-0012-00000008
	ksusesdi:   0000-0000-00000000
	ksusetxn:   0001-0012-00000008
ksqgtl: RETURNS 0
*** 2008-08-04 15:38:36.868
ksqgtl *** HW-00000007-03000a33 mode=6 flags=0x11 timeout=21474836 ***
ksqgtl: xcb=0x6F218758, ktcdix=2147483647, topxcb=0x6F218758
	ktcipt(topxcb)=0x0
*** 2008-08-04 15:38:36.868
ksucti: init session DID from txn DID: 0001-0012-00000008
ksqgtl:
	ksqlkdid: 0001-0012-00000008
*** 2008-08-04 15:38:36.868
*** ksudidTrace: ksqgtl
	ktcmydid(): 0001-0012-00000008
	ksusesdi:   0000-0000-00000000
	ksusetxn:   0001-0012-00000008
ksqgtl: RETURNS 0
*** 2008-08-04 15:38:36.883
ksqrcl: HW,7,3000a33
ksqrcl: returns 0
*** 2008-08-04 15:38:36.883
ksqgtl *** FB-00000007-03000a31 mode=6 flags=0x11 timeout=21474836 ***
ksqgtl: xcb=0x6F218758, ktcdix=2147483647, topxcb=0x6F218758
	ktcipt(topxcb)=0x0
*** 2008-08-04 15:38:36.883
ksucti: init session DID from txn DID: 0001-0012-00000008
ksqgtl:
	ksqlkdid: 0001-0012-00000008
*** 2008-08-04 15:38:36.883
*** ksudidTrace: ksqgtl
	ktcmydid(): 0001-0012-00000008
	ksusesdi:   0000-0000-00000000
	ksusetxn:   0001-0012-00000008
ksqgtl: RETURNS 0
*** 2008-08-04 15:38:36.899
ksqrcl: FB,7,3000a31
ksqrcl: returns 0
*** 2008-08-04 15:38:36.899
ksqgtl *** TX-0001000e-0000110a mode=6 flags=0x401 timeout=0 ***
ksqgtl: xcb=0x6F218758, ktcdix=2147483647, topxcb=0x6F218758
	ktcipt(topxcb)=0x0
*** 2008-08-04 15:38:36.899
ksucti: init session DID from txn DID: 0001-0012-00000008
ksqgtl:
	ksqlkdid: 0001-0012-00000008
*** 2008-08-04 15:38:36.915
*** ksudidTrace: ksqgtl
	ktcmydid(): 0001-0012-00000008
	ksusesdi:   0000-0000-00000000
	ksusetxn:   0001-0012-00000008
ksqgtl: RETURNS 0
미리 알았더라면 좀 더 좋은 책을 쓸 수 있었을텐데... 하는 아쉬움이 들 정도로 좋은 Event이다.
Trackback 0 : Comment 0

Write a comment

티스토리 툴바