2014. 12. 8. 18:40

오라클의 동기화 매커니즘 


하나 밖에 없는 리소스를 여러명이 사용하려고 하면 문제가 생김

오라클에서는 래치(Latch)와 락(Lock)을 이용, 

두 개의 동기화 매커니즘을 이용해서 리소스를 보호함


래치와 락의 차이점 

 

분류 

 래치(Latch)

락(Lock) 

목적 

하나의 목적을 수행 :

메모리 구조 (SGA) 에 대한 배타적인 접근을 위함

(오라클 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 단위 

- 종류에 따라 다르지만 대체 2초를 기다림) 

일정 시간 동안 지속됨

(트랜잭션 동안)

-커밋 안되면 계속 락 걸려있음

 큐(Queue)

프로세스가 래치 획득을 실패한 후 

슬립(Sleep) 상태로 들어갈 때, 

해당요청은 큐(queue)로 관리되지 않으며, 

요청한 순서대로 서비스되지 않음 

(latch wait list를 이용해 

큐 방식으로 사용되는 래치들은 예외임)

대부분 래치는 먼저 온 놈이 임자, 순서 보장 안함 

프로세스가 락 획득을 실패한 후, 

해당 요청은 큐(queue)로 관리되며, 

요청한 순서대로 서비스됨 (NOWAIT 모드는 예외임)

순서 보장함

데드락

래치는 데드락(deadlock)이 발생되지 않도록 구현됨 

락은 큐(queue) 방식을 사용하며, 

데드락이 발생될 가능성이 높음 

데드락이 발생될 때마다 트레이스 파일이 생성됨


Posted by 성장하는yw