사용자 도구

사이트 도구


study:oracle:adv_owi_10g:latch_and_lock

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
study:oracle:adv_owi_10g:latch_and_lock [2009/07/29 08:35]
starlits
study:oracle:adv_owi_10g:latch_and_lock [2009/07/29 09:29] (현재)
starlits
줄 9: 줄 9:
  
 ^ 분류 ^ 래치(latch) ^ 락(lock) ^ ^ 분류 ^ 래치(latch) ^ 락(lock) ^
-^ 목적 | | | +^ 목적 | 메모리구조에 대한 베터적인 접근 1. 동일리소스 공유(호환O) \\ 2. 배타적인 접근(호환X) 
-^ 사용범위 | | | +^ 사용범위 | SGA내부구조 데이타베이스 데이타 \\ 메타데이터 접근제어 \\ 트랜젝션 단위 
-^ 획득방식 | | | +^ 획득방식 | 2가지 모드 6가지 모드 
-^ 범위 | | | +^ 범위 | SGA 내부 데이터베이스 내부 
-^ 복잡도 | | | +^ 복잡도 | 단순 복잡 
-^ 지속기간 | | | +^ 지속기간 | 아주 짧은 순간 \\ (microsecond 단위) 일정시간 동안 지속 \\ (트랜잭션 단위) 
-^ 큐(Queue) | | | +^ 큐(Queue) | Queue로 관리 안함 Queue로 관리 
-^ DeadLock | | |+^ DeadLock | 발생안함 발생함 |
  
  
줄 51: 줄 51:
  
 ==== Latch 동작 매커니즘 ==== ==== 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 ==== ==== Latch 관련 Dynamic Views ====
 +
 +^ V$LATCH  | 모든 래치들의 통계에 대한 합계치 정보 |
 +^ V$LATCH_MSSES  | 래치 MISS가 발생한 커널코드의 영역에 대한 정보 |
 +
 ==== 일반적인 Latch 관련 대기이벤트들 ==== ==== 일반적인 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에 기록하고자 하는 프로세스가 작업하는 동안 획득 |
 +
 +  - 그 외 래치정보는 V$LATCHNAME 뷰에서 조회가 가능한다. 
  
 ===== Lock ===== ===== Lock =====
  
 ==== Lock의 분류 ==== ==== Lock의 분류 ====
 +  - Enqueue 락
 +    - User Type Lock :
 +    - System Type Lock :
 +  - 일반 락
 +    - row cache lock
 +    - library cache lock
 +    - library cache pin
 +    - buffer locok 
 +
 ==== Lock이 보호하는 Resource ==== ==== Lock이 보호하는 Resource ====
 +
 +^ latch | SGA 보호 |
 +^ lock | 데이터베이스 전체 보호 |
 +
 +^ Enqueue 락  | V$LOCK |
 +^ 일반 락  | V$SESSION_WAIT |
 +
 ==== Lock 동작 매커니즘 ==== ==== 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 | <del>O</del> | X | X | 
 +^ S   | O | O | <del>O</del> | O | X | X | 
 +^ SSX | O | O | X | X | X | X | 
 +^ X   | O | X | X | X | X | X | 
 +
 +
 +=== lock 획득 ===
 +
 ==== Lock 관련 Dynamic Views ==== ==== Lock 관련 Dynamic Views ====
-==== 일반적인 Lock 관련 대기이벤트들 ==== 
  
 +^ 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.1248824147.txt.gz · 마지막으로 수정됨: 2009/07/29 08:35 저자 starlits