Database/Oracle2012. 3. 18. 10:38

래치와 락의 차이점을 집중적으로 들어가기에 앞서 가볍게 래치와 락의 차이를 알아보자.

 분류            래치(LATCH)             락(LOCK)
 목적  하나의 목적을 수행함 : 메모리 구조에 대한 배타적인 접근을 위함 (오라클 9i부터 cache buffers chains latch 들은 읽기 전용시에 공유가 가능함)
-거의 독점적-
 두가지 목적을 수행함 : 락 모드가 호환 가능하면 다수의 프로세스가 동일한 리소스를 공유하는 것을 허용하며, 락 모드가 호환 가능하지 않으면 리소스에 대한 배타적인 접근만 허용함 (공유lock이 많음)
 사용범위  sga내부의 데이터 구조에만 적용.
메모리 오브젝트를 임시적으로 보호함.
단일 오퍼레이션으로 메모리 구조에 대한 접근 제어. 트랜잭션 단위가 아님.
 테이블, 데이터 블록 및 state object와 같은 오브젝트를 보호함.
 데이터베이스의 데이터 또는 메타데이터 접근제어. 트랜잭션 단위
 획득방식  두가지 모드로 요청이 가능
willing-to-wait 또는 no-wait
 6가지 모드로 요청가능 : null, row share, row exclusive, share, share row exclusive, 또는 exclusive
아래 표 참조.
 범위  sga내부에 정보가 존재하며, 로컬 인스턴스에만 볼 수 있음.
- 인스턴스 레벨로 작동-
 데이터베이스 내부에 정보가 존재하며, 모든 인스턴스에서 볼 수 있음. lock은 데이터 베이스 레벨에서 작동.
 복잡도  단순한 명령어를 사용하여 구현됨.
일반적으로 test-and-set, compare-and-swap 또는 단순한 cpu명령어. 구현이 쉬움
 문맥 교환(context switch)을 포함한 일련의 명령어들을 사용하여 구현됨. 구현이 복잡하다.
 지속기간  짧은 순간만 지속됨
(microsecond단위) = 100만분의 1초
 일정시간동안 지속
(트랜잭션 동안)
 큐(Queue)  프로세스가 래치 획득을 실패 한 후 슬립(sleep) 상태로 들어갈 때, 해당 요청은 큐(queue)로 관리되지 않으며, 요청한 순서대로 서비스 되지않음
(latch wait list를 이용하여 큐방식으로 사용되는 래치들은 예외)
 프로세스가 락 획득을 실패한 후, 해당 요청은 큐(queue)로 관리되며, 요청한 순서대로 서비스됨(nowait 모드는 예외)
 데드락(DEADLOCK)  데드락이 발생되지 않도록 구현됨
(레벨방식)
 락은 큐 방식을 사용하며, 데드락이 발생될 가능성이 높다. 데드락이 발생 될 때마다 트레이스 파일이 생성된다.

참조 : 조동욱님 OWI책 P49


 
LOCK 획득방식중 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)


참조 : 조동욱님 OWI책 P70














출처 : http://baind.tistory.com/entry/LATCH-와-LOCK-분류표

'Database > Oracle' 카테고리의 다른 글

[펌] granularity 란?  (0) 2012.03.18
[펌] cardinality 란?  (0) 2012.03.18
[펌] Latch 란 무엇인가  (0) 2012.03.18
[펌] Lock 개요  (0) 2012.03.18
[펌] Cursor 란??  (0) 2012.03.18
Posted by 아로나