본문 바로가기

학교/데이터베이스

14. Concurrency Control

Concurrency Control Protocols

이전 장에서 본 Serialize 검증 기법은 너무 비효율적이기에 설계된 프로토콜.

 

다음 방식들을 상용한다.

 

1. Locking

2. Timestmap

3. Multiversion CC Protocols

4. Optimistic protocols

5. Multiple granularity Concurrency Control

 

Two-Phase Locking 기법

0(unlock)과 1(lock)을 사용해, 외부 트렌젝션의 접근 차단

2PLP라고도 한다.

 

규칙은 다음과 같다.

 

1. 데이터 X에 대해 read/write 연산을 하고 싶으면, X에 대한 lock을 얻어야 한다.

2. 종료되기 전엔 모든 개체에 대해 unlock (lock 반환)

3. lock이 된 객체는 다른 트렌젝션에 의해 다시 lock 금지 (이중 lock 금지)

4. lock이 된 객체는 다른 트렌젝션이 풀 수 없다.

 

하지만, serializable한게, 모두 2PLP를 사용하는 건 아니다.

2PLP는 충분조건이지, 필요조건이 아니다.

 

Two-Phase Locking(이하 2PLP)에서 lock 연산을 다음과 같이 한다.

 

grwoing phase : 트렌젝션은 lock 만 할 수 있음

shrinking phase : 한 번 unlock을 하면, 더 이상의 새로운 lock 허용 X

즉, 한 번 unlock을 시작하면 그 때부터 shrinking 단계 시작이다.

 

Lock table

위에서의 lock 규칙은 너무 제약이 심해서 완화된 방법

 

lock 매니저가 lock객체들을 기록하고, 관리한다.

 

<데이터 이름, LOCK 유무(0 or 1),  점유중인 트렌젝션>

이런 형식으로 관리한다.

 

Shared/Exclusive locks

Shared locks

read lock이라고도 하며, 데이터 를 다른 사용자들도 같이 read할 수 있게 한다.

어떤 데이터에 대해 shared lock이 여러개 걸릴 수 있다.

Sharad lock이 걸려 있으면, Exclusive lock을 걸 수 없다.

 

Lock table은 다음과 같다.

<데이터 이름, 몇 명이나 읽을지, 점유중인 트렌젝션>

-> write는 접근 제한 수가 무조건 1이다.

 

Exclusive locks

write lock이라고도 하며, 

어떤 트렌젝션에서. 데이터에 write를 할 때, 완료될 때 까지, 다른 트렌젝션에서

읽기나 쓰기 연산을 할 수 없게 한다.

Exclusive lock이 걸린 데이터들은 다른 트렌젝션이 Exclusive lock을 걸 수 없다.

Shared lock이 걸려있다면, Exclusive lock을 걸 수 없다.

 

.

Conservative 2PL ( static 2PL)

트랜젝션이 시작 전, 필요한 모든 item에 대한 lock을 가지고 시작.

lock 을 다 갖고 시작하니, Deadlock이 일어나지 않는다.

 

 

Strict 2PL

commit이나 abort가 일어나기 전 까진 lock 해제 불가.

commit되지 않은 데이터를 읽을 상황이 없으니, recoverability 하다.

conservative 2PL과 결합하지 않는 한, Deadlock 발생 가능성 있음

 

Rigorous 2PL

strict 2PL 보장

다만 이거는 commit이나 abort 전 까지

growing phase를 빠져나갈 수 없다.

즉, 위의 strict 2PL보다 더 제한이 심하다.

 

정리하자면 다음과 같다.

 

'학교 > 데이터베이스' 카테고리의 다른 글

16. Database Recovery  (0) 2020.12.10
15. Dead lock  (0) 2020.12.10
13. serialize schedule  (0) 2020.12.07
12. Transaction Processing  (0) 2020.12.07
11. B+-tree  (0) 2020.12.06