write-lock (exclusive lock)
- read / write(insert, modify, delete) 할 때 사용함
- 다른 tx가 같은 데이터를 read / write 하는 것을 허용하지 않음
read-lock (shared lock)
- read 할 때 사용함
- 다른 tx가 같은 데이터를 read 하는 것은 허용함
lock 호환성 | read-lock | write-lock |
read-lock | O | X |
write-lock | X | X |
lock을 써도 생기는 이상한 현상
이 현상을 해결하기 위해서는, tx2 부분에서 unlock(x)와 write_lock(y)의 위치를 서로 바꿔주면 됨. 그렇다면 x, y의 결과값이 x = 300, y = 300 이 아니라, 원래 결과대로 x = 400, y = 300 이 나옴.
tx1 부분도 마찬가지로 unlock(y)와 write_lock(x) 의 위치를 바꿔주면 이상없이 정상적으로 x = 300, y = 500 이 됨.
이러한 방식의 해결방법을 2PL protocol(two-phase locking) 이라고 함.
2PL protocol은 Serializability를 보장함.
하지만 2PL protocol을 사용하더라도 어떠한 상황에서는 Deadlock이 발생할 수 있음.
이를 보완하기 위해 2PL protocol 중에서도 여러 종류가 나뉘게 됨.
conservative 2PL
- 모든 lock을 취득한 뒤 transaction을 시작함
- deadlock-free
- 실용적이지 않음
strict 2PL (S2PL)
- strict schedule을 보장하는 2PL
- recoverability 보장
- write-lock을 commit / rollback 될 때 반환
strong strict 2PL (SS2PL or rigorous 2PL)
- strict schedule을 보장하는 2PL
- recoverability 보장
- read-lock / write-lock 모두 commit / rollback 될 때 반환
- S2PL보다 구현이 쉬움
- 하지만 S2PL보다 read-lock에 대해서 반환을 늦게 하기 때문에, 다른 tx에서 해당 데이터를 write 하고 싶을 때 대기시간이 더 길어진다는 단점이 있음
lock의 호환성이 별로 좋지않기 때문에 이를 해결하기 위해 MVCC (multiversion concurrency control) 라는 방법을 찾음.
출처 : https://www.youtube.com/watch?v=0PScmeO3Fig&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=18
'DB' 카테고리의 다른 글
20. Functional dependency (0) | 2023.05.09 |
---|---|
19. MVCC 개념 (0) | 2023.05.08 |
17. transaction isolation level (0) | 2023.05.04 |
16. concurrency control - 2 (0) | 2023.05.03 |
15. concurrency control - 1 (0) | 2023.05.03 |
댓글