Oracle 에서 Latch 와 Lock(Enququ)에 대해 알아봅니다 

 

Lock(Enqueue) 란?

Job들을 줄세운 뒤에 순서대로 처리한다 

특징1) 요청 순서를 보장한다

특징2) 줄을 관리하는 별도의 관리job이 필요하다  

특징3) 단일 처리 시간이 상대적으로 오래걸린다 (관리job은 줄이 비워진걸 확인하고 다음 job을 실행하게 해줘야함)

 

Latch란 ? 

Job들이 끊임없이 자원을 차지하려고 시도함 (무질서한 할인판매대 같음 - 내가 늦게왔어도 먼저 잡으면 장떙)

경량화된 lock 이라 한다 

특징1)  요청 순서를 보장하지 않느다 

특징2) 줄을 관리하는 별도의 관리job이 필요없다  

특징3) 단일 처리 시간이 매우 빠르다  (중간에 관리 job의 업무가 빠짐)

- Oracle에서 접속자들은 동시에 SGA 영역을 사용하는데 그때 개별적인 프로세스들이 Latch를 잡는다

- 일부 Latch는 순서를 보장하기도 한다   

 

Mutex는?

OS의 Mutex 개념을 Oracle에서 비슷하게 구현한게 Latch다 

 

특성 Lock(Enqueu) Latch  Mutex
사용범위 테이블, DB lock등 오브젝트에 접근제어를 위해 사용
대부분 transaction단위
SGA 내부의 데이터 구조의 접근제어를 위해 사용 SGA의 Library Cache 영역에 적용
(주로 Parsing)
Oracle이 10G부터 Latch를 개선한 Mutex를 개발해서 Latch 대신 사용
실행속도 C,C++로 구현이되어
OS FIFO를 이용
구현이 복잡하고         
상대적으로 느리다
CPU register에 직접 Access하는 CPU로직 구현으로 매루 빠름 OS Mutex 사용
빠름
지속시간 일정시간동안 지속 (tx) 짧음 (microSecond단위) 짧음
요청 순서보장 순서보장
lock 획득을 실패하면 , Enqueue된다
(no wait 모드는 예외)
queue로 관리X
요청한 순서대로 처리 되지 않음
순서보장 X
범위 DB 내부에 정보가 존재
모든 Instance에서 보임 (RAC)
SGA 내부에 정보가 있음
local instance에서만 보임
SGA 내부에 정보가 있음
local instance에서만 보임
획득방식  S,IS,X,IX,등 6가지 모드  willing-to-wait 방식
또는 no-wait