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 |