study:oracle:adv_owi_10g:latch_and_lock
문서의 이전 판입니다!
목차
Latch and Lock
- 오라클은 latch 와 lock 이라는 Synchronization(동기화) 매커니즘을 이용하여 리소스를 보호한다.
- latch 와 lock 를 둘 다 동시작업으로부터 자원을 보호하는 것이다.
- OWI를 이용하면 latch와 lock에 의한 경합현상을 직관적으로 파악할 수 있다.
latch와 lock의 차이점
| 분류 | 래치(latch) | 락(lock) |
|---|---|---|
| 목적 | ||
| 사용범위 | ||
| 획득방식 | ||
| 범위 | ||
| 복잡도 | ||
| 지속기간 | ||
| 큐(Queue) | ||
| DeadLock |
Latch
Latch 정의
- 가벼운 락(Lock)
- 오라클 메뉴얼에서 분류하는 방법
- 아주 빠른 속도로 작동하게끔 구현된 경량화된 락
- 일반적으로는 Latch와 Lock 을 전혀 다른 객체로 분류
- 물리적으로 Shared Pool 영역에 존재하는 일종의 메모리 구조체
- 매우 간단하고 작은 메모리영역 사용
Latch가 보호하는 Resource
- Latch가 보호하는 Resource : SGA
- SGA의 특정영역을 탐색하거나 변경하고자 하는 프로세스는 반드시 해당 영역을 관장하는 latch를 획득해야 한다.
- Latch를 통해서 Oracle의 SGA자원을 보호한다.
- Shared Pool 래치
- 새로운 SQL문을 실행하고자하는 프로세스는 해당 SQL을 Shared Pool의 library cache 영역에 올린다.
이 때 필요한 Heap Memory 영역을 할당받기 위해 획득하는 래치이다. - Shared Pool 래치는 보통 전체 인스턴스에 하나만 존재하므로
한번에 하나의 프로세스만이 Heap으로부터 Chunk를 할당 받을 수 있다.
- Cache Buffers Chains 래치
- Select 문을 통해서 특정 datablock을 읽기 위해서
datablock의 DBA(Data Block Address)와 Class에 해당하는 Hash Chain에 접근하고자 하는 모든 프로세스는
반드시 해당 해시 체인을 관장하는 cache buffers chains 래치를 획득한다.
- redo copy 래치
- DML을 통해서 데이터를 변경한 모든 프로세스는 PGA영역에 Redo 데이터를 생성하는데,
이 리두 데이터를 Redo buffer로 복사하기 위해서 획득하는 래치이다.
latch 분류
| 분류기준 | 설명 | 조회 뷰 |
|---|---|---|
| Parent latch(부모래치) | 여러 개의 자식래치를 거느리는 래치 | V$LATCH_PARENT |
| Solitary latch(독립래치) | 전체 인스턴스에 단 하나만 존재하는 래치 | |
| Child latch(자식래치) | 부모래치에 속한 래치 | V$LATCH_CHILD |
Latch 동작 매커니즘
latch level(래치레벨)
- 래치 획득과정에서 데드락을 원천적으로 방지하기 위해 모든 래치에 레벨을 부여
- 레벨을 14가지 ( 0 ~ 13 )
- 자식래치들은 부모래치와 동일한 레벨값을 갖는다.
latch mode
- 기본적으로 Exclusive 모드 (한 순간에 하나의 프로세스만이 래치를 보유)
- 그러나, cache buffers chains 래치는 읽기작업의 경우 Shared 모드를 사용한다.
latch 획득
Willing-to-wait 모드의 래치 획득
- 기본모드(Willing-to-wait 모드)
- 래치를 획득할 수 있을 때까지 대기한다.
- 최초 래치 획득 실패시 곧바로 SLEEP 하지 않고 SPIN을 수행하는 이유 2가지 ? (ㅋㅋ)
- 스핀을 시도하고도 래치를 획득하는데 실패한 프로스세스는 SLLEP 상태로 바뀐다.
SLEEP 상태의 프로세스가 깨어나는 방법 2가지 ? - latch wait posting
- 조회 뷰 : V$LATCH
- 컬럼 : GETS, MISSES, SPIN_GETS SLEEPS
No-wait 모드의 래치 획득
- 다음과 같은 특수한 경우에 No-wait 모드를 획득
- 현재 다른 래치들을 보유하고 있는 프로세스가 현재 보유한 래치 중 가장 최근에 획득한 래치보다 더 낮거나 같은 레벨의 래치를 획득하고자 할때
- redo copy 래치와 같은 특수한 래치
latch Cleanup
- Shared Memory 훼손(매우 심각한 문제)로 래치를 Cleanup하는 메커니즘
- 프로세스가 래치를 보유한 채로 종료되면 PMON은 각 래치마다 구현되어 있는 Cleanup function을 호출한다.
- 각 래치의 Cleanup function은 래치복구영역에 기록된 정보를 이용해서 공유메모리영역을 원래상태로 복구하고,
이 작업이 끝나면 PMON은 래치를 해지한다.
Latch 관련 Dynamic Views
| V$LATCH | 모든 래치들의 통계에 대한 합계치 정보 |
|---|---|
| V$LATCH_MSSES | 래치 MISS가 발생한 커널코드의 영역에 대한 정보 |
일반적인 Latch 관련 대기이벤트들
Lock
Lock의 분류
Lock이 보호하는 Resource
Lock 동작 매커니즘
Lock 관련 Dynamic Views
일반적인 Lock 관련 대기이벤트들
study/oracle/adv_owi_10g/latch_and_lock.1248825326.txt.gz · 마지막으로 수정됨: 저자 starlits
