태터데스크 관리자

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

태터데스크 메시지

저장하였습니다.

Oracle에서 Event란 무엇을 의미하는가?

오라클 2009.03.04 10:49
얼마전 사내의 한 신입 사원과 "이벤트"라는 용어의 의미에 대해 논의할 시간이 있었다. 그 신입 사원(뿐이겠는가!)은 "이벤트"라는 용어를 제대로 이해하지 못하고 있었다.

이 모든 것은 우리가 영어를 제대로 해석하지 못하는데서 발생하는 것이다.

만일 "이벤트"라는 용어 대신 "사건"이라는 용어를 사용했다면 모든 것이 명확했을 것이다. 앞으로 이벤트라는 말을 만나면 이것을 "사건"으로 바꾸면 의미가 매우 분명해지는 것을 경험할 것이다.

Oracle에서 이벤트라는 말은 보통 2가지 경우에 사용된다.
  • 대기(용) 이벤트: 어떤 사건이 종료되기를 대기한다는 의미이다.
  • 진단(용) 이벤트: 어떤 사건이 발생했을 때 진단을 수행하겠다는 의미이다.

db file sequential read 이벤트의 의미는 무엇인가? 다음과 같은 Code를 상상해 보자.

function read_single_block(file#, block#) {
    ...
    start_wait('db file sequential read');
    v = pread(...);
    end_wait('db file sequential read');
}

즉, db file sequential read 이벤트는 OS Call인 pread함수를 호출한 후 리턴되는 사건(이벤트)을 의미한다. 따라서 이벤트를 대기한다는 말은 "어떤 사건(Function Call이 리턴되는 사건)이 발생할 때까지 기다린다"는 의미로 해석해야 한다.


이런 의미에서 Carry MilsapWAIT라는 용어 대신 SYSCALL 이라는 용어를 사용해야 한다고 주장한다. 매우 통찰력있는 주장이라고 할 수 있다. 대기의 대상이 되는 모든 이벤트는 SYSCALL과 연관되기 때문이다. 이 의미를 잘 파악하면 Wait = Sleep이 아닌 이유가 명확해진다.

다음과 같이 진단 이벤트를 사용한다.
  
alter session set events '10046 trace name context forever, level 12';


이것을 어떻게 해석해야 하는가?
  • 10046 = Query가 수행되는 사건. 즉 Query를 수행하는 "사건"을 의미한다.
  • trace name = Trace를 수행하라. 사건이 발생했을 때의 행위(Action)을 의미한다. 
  • context forever, level 12 = 사건이 발생할 때마다 행위를 수행하되, 행위의 레벨을 12로 하라
즉 다음과 같은 호출은
   
alter session set events '10046 trace name context forever, level 12';

다음과 같이 해석하면 된다.
   
10046 사건(Query가 수행되는 사건)이 발생하면 Trace를 수행하되, 사건이 발생할 때마다 하고, 레벨은 12로 하라

Tanel Poder가 진단 이벤트에 대해 아주 상세하고 친절한 해석을 제공하고 있다.


Oracle 이벤트라는 말을 사용할 때 무슨 고유명사나 심오한 의미가 있는 것으로 해석해서는 안된다. 말 그대로 "사건"으로 해석해야 정확한 의미가 파악된다.

항상 이 빌어먹을 영어가 문제다.

Trackbacks 0 : Comments 1
  1. 이명진 2009.03.04 13:50 신고 Modify/Delete Reply

    글을 읽고 나니 어느 정도 이벤트에 대한 정의가 뚜렷해지는 것 같습니다.
    10046, 10053 event 같은 경우에 위의 예처럼 생각하면 더욱 이해가 쉽게 되겠네요.
    오라클 Ace로 추천받으신 점 다시한번 감축드립니다^^*.

Write a comment