래치와 락의 차이점
분류 |
래치 |
락 |
목적 |
하나의 목적을 수행 : 메모리 구조에 대한 배타적인 접근을 위함 (오라클 9i 부터 cache buffers chains latch 들은 읽기 전용시 공유 가능) |
두 가지 목적을 수행 - 락모드가 호환 가능 : 다수의 프로세스가 동일 리소스를 공유하는 것을 허용 락모드가 호환 불가능 : 리소스에 대한 배터적인 접근만 허용 |
사용범위 |
SGA내부의 데이터 구조에만 적용. 메모리 오브젝트를 임시적으로 보호. 단일 오퍼레이션으로 메모리 구조에 대한 접근 제어 트랜잭션 단위가 아님 |
테이블, 데이터 블록 및 state object 와 같은 오브젝트를 보호함. 데이터베이스의 데이터 또는 메타데이터 접근 제어 트랜잭션 단위 |
획득방식 |
두가지 모드로 요청 가능 : willing-to-wait 또는 no-wait |
6가지 모드로 요청 가능 : null, row share, row exclusive,share, share row exclusive 또는 exclusive |
범위 |
SGA내부에 정보가 존재하며, 로컬 인스턴스에서만 볼 수 있음 - 래치는 인스턴스 레벨로 작동 |
데이터베이스 내부에 정보가 존재하며, 모든 인스턴스에서 볼 수 있음 - 락은 데이터베이스 레벨에서 작동 |
복잡도 |
단순한 명령어를 사용하여 구현 일반적으로 test-and-set, compare-and-swap 또는 단순한 CPU명령어. 구현이 쉬움 |
문맥 교환(context switch)을 포함한 일련의 명령어들을 사용하여 구현됨. 구현이 복잡함 |
지속기간 |
아주 짧은 순간만 지속 ( microsecond단위 ) |
일정 시간 동안 지속됨 (트랜잭션 동안) |
큐 (Queue) |
프로세스가 래치 획득을 실패한 후 슬립 상태로 들어갈 때, 해당 요청은 큐로 관리되지 않으며, 요청한 순서대로 서비스 되징 않음 (latch wait list를 이용하여 큐 방식으로 사용되는 래치들은 예외) |
프로세스가 락 획득을 실패한 후, 해당 요청은 큐로 관리 요청한 순서대로 서비스됨 ( NOWAIT 모드는 예외 ) |
데드락 |
래치는 데드락이 발생되지 않도록 구현됨 |
락은 큐 방식을 사용하며, 데드락이 발생될 가능성이 높음. 데드락이 발생 될 때마다 트레이스 파일 생성 |
래치란?
- 락 중에서 아주 빠른 속도로 작동하게끔 구현된 경량화된 락
- Shared Pool 영역에 존재하는 일종의 메모리 구조체
래치가 보호하는 리소스
- SGA에 접근하는 모든 프로세스는 반드시 해당 영역을 관장하는 래치를 획득한 후에만 접근이 허용됨.
래치를 획득하는데 실패한 프로세스는 래치를 획득할 수 있을 때까지 특정 대기 이벤트를 기다림
'OWI' 카테고리의 다른 글
redo log owi (0) | 2014.12.11 |
---|