사용자 도구

사이트 도구


study:oracle:adv_owi_10g:latch_and_lock

Latch and Lock

  1. 오라클은 latch 와 lock 이라는 Synchronization(동기화) 매커니즘을 이용하여 리소스를 보호한다.
  2. latch 와 lock 를 둘 다 동시작업으로부터 자원을 보호하는 것이다.
  3. OWI를 이용하면 latch와 lock에 의한 경합현상을 직관적으로 파악할 수 있다.

latch와 lock의 차이점

분류 래치(latch) 락(lock)
목적 메모리구조에 대한 베터적인 접근 1. 동일리소스 공유(호환O)
2. 배타적인 접근(호환X)
사용범위 SGA내부구조 데이타베이스 데이타
메타데이터 접근제어
트랜젝션 단위
획득방식 2가지 모드 6가지 모드
범위 SGA 내부 데이터베이스 내부
복잡도 단순 복잡
지속기간 아주 짧은 순간
(microsecond 단위)
일정시간 동안 지속
(트랜잭션 단위)
큐(Queue) Queue로 관리 안함 Queue로 관리
DeadLock 발생안함 발생함

Latch

Latch 정의

  1. 가벼운 락(Lock)
    1. 오라클 메뉴얼에서 분류하는 방법
    2. 아주 빠른 속도로 작동하게끔 구현된 경량화된 락
    3. 일반적으로는 Latch와 Lock 을 전혀 다른 객체로 분류
  2. 물리적으로 Shared Pool 영역에 존재하는 일종의 메모리 구조체
  3. 매우 간단하고 작은 메모리영역 사용

Latch가 보호하는 Resource

  1. Latch가 보호하는 Resource : SGA
  2. SGA의 특정영역을 탐색하거나 변경하고자 하는 프로세스는 반드시 해당 영역을 관장하는 latch를 획득해야 한다.
  3. Latch를 통해서 Oracle의 SGA자원을 보호한다.
  1. Shared Pool 래치
    1. 새로운 SQL문을 실행하고자하는 프로세스는 해당 SQL을 Shared Pool의 library cache 영역에 올린다.
      이 때 필요한 Heap Memory 영역을 할당받기 위해 획득하는 래치이다.
    2. Shared Pool 래치는 보통 전체 인스턴스에 하나만 존재하므로
      한번에 하나의 프로세스만이 Heap으로부터 Chunk를 할당 받을 수 있다.
  2. Cache Buffers Chains 래치
    1. Select 문을 통해서 특정 datablock을 읽기 위해서
      datablock의 DBA(Data Block Address)와 Class에 해당하는 Hash Chain에 접근하고자 하는 모든 프로세스는
      반드시 해당 해시 체인을 관장하는 cache buffers chains 래치를 획득한다.
  3. redo copy 래치
    1. DML을 통해서 데이터를 변경한 모든 프로세스는 PGA영역에 Redo 데이터를 생성하는데,
      이 리두 데이터를 Redo buffer로 복사하기 위해서 획득하는 래치이다.

latch 분류

분류기준 설명 조회 뷰
Parent latch(부모래치) 여러 개의 자식래치를 거느리는 래치 V$LATCH_PARENT
Solitary latch(독립래치) 전체 인스턴스에 단 하나만 존재하는 래치
Child latch(자식래치) 부모래치에 속한 래치 V$LATCH_CHILD

Latch 동작 매커니즘

latch level(래치레벨)

  1. 래치 획득과정에서 데드락을 원천적으로 방지하기 위해 모든 래치에 레벨을 부여
  2. 레벨을 14가지 ( 0 ~ 13 )
  3. 자식래치들은 부모래치와 동일한 레벨값을 갖는다.

latch mode

  1. 기본적으로 Exclusive 모드 (한 순간에 하나의 프로세스만이 래치를 보유)
  2. 그러나, cache buffers chains 래치는 읽기작업의 경우 Shared 모드를 사용한다.

latch 획득

Willing-to-wait 모드의 래치 획득
  1. 기본모드(Willing-to-wait 모드)
  2. 래치를 획득할 수 있을 때까지 대기한다.
  3. 최초 래치 획득 실패시 곧바로 SLEEP 하지 않고 SPIN을 수행하는 이유 2가지 ? (ㅋㅋ)
  4. 스핀을 시도하고도 래치를 획득하는데 실패한 프로스세스는 SLLEP 상태로 바뀐다.
    SLEEP 상태의 프로세스가 깨어나는 방법 2가지 ?
  5. latch wait posting
  6. 조회 뷰 : V$LATCH
    1. 컬럼 : GETS, MISSES, SPIN_GETS SLEEPS
No-wait 모드의 래치 획득
  1. 다음과 같은 특수한 경우에 No-wait 모드를 획득
    1. 현재 다른 래치들을 보유하고 있는 프로세스가 현재 보유한 래치 중 가장 최근에 획득한 래치보다 더 낮거나 같은 레벨의 래치를 획득하고자 할때
    2. redo copy 래치와 같은 특수한 래치

latch Cleanup

  1. Shared Memory 훼손(매우 심각한 문제)로 래치를 Cleanup하는 메커니즘
  2. 프로세스가 래치를 보유한 채로 종료되면 PMON은 각 래치마다 구현되어 있는 Cleanup function을 호출한다.
    1. 각 래치의 Cleanup function은 래치복구영역에 기록된 정보를 이용해서 공유메모리영역을 원래상태로 복구하고,
      이 작업이 끝나면 PMON은 래치를 해지한다.

Latch 관련 Dynamic Views

V$LATCH 모든 래치들의 통계에 대한 합계치 정보
V$LATCH_MSSES 래치 MISS가 발생한 커널코드의 영역에 대한 정보

일반적인 Latch 관련 대기이벤트들

latch: cache buffers chains buffer cache 에서 특정 블록을 탐색하고자 하는 프로세스가 획득
latch: cache buffers lru chains buffer cache 에서 free buffer와 dirty buffer 를 탐색하고자 하는 프로세스가 획득
latch: shared pool Shared Pool의 Heap 영역에서 새로운 Chunk를 할당받고자 하는 프로세스가 획득
latch: library cache Library Cache 영역(TABLE,VIEW 등 SQL문수행관련모든정보 보관)을 탐색하고자 하는 프로세스가 획득
latch: redo copy DML에 의한 변동사항을 Redo buffer에 기록하고자 하는 프로세스가 작업하는 동안 획득
  1. 그 외 래치정보는 V$LATCHNAME 뷰에서 조회가 가능한다.

Lock

Lock의 분류

  1. Enqueue 락
    1. User Type Lock :
    2. System Type Lock :
  2. 일반 락
    1. row cache lock
    2. library cache lock
    3. library cache pin
    4. buffer locok

Lock이 보호하는 Resource

latch SGA 보호
lock 데이터베이스 전체 보호
Enqueue 락 V$LOCK
일반 락 V$SESSION_WAIT

Lock 동작 매커니즘

lock mode

락모드(0~6)
모드 설명
0 None
1 NULL(N)
2 Sub-Shared(SS)
Row-Shared(RS)
3 Sub-Exclusive(SX)
Row-Exclusive(RX)
4 Shared(S)
5 Shared-Sub-Exclusive(SSX)
Shared-Row-Exclusive(SRX)
6 Exclusive(X)
락모드호환성
N SS SX S SSX X
N O O O O O O
SS O O O O O X
SX O O O O X X
S O O O O X X
SSX O O X X X X
X O X X X X X

lock 획득

Lock 관련 Dynamic Views

V$LOCK
V$LOCKED_OBJECT
V$ENQUEUE_LOCK
DBA_WAITERS

일반적인 Lock 관련 대기이벤트들

row cache lock
buffer busy waits
read by other session
library cache lock
library cache pin
DFS lock handle
study/oracle/adv_owi_10g/latch_and_lock.txt · 마지막으로 수정됨: 2009/07/29 09:29 저자 starlits