DB Lock 종류
- 공유 잠금 ( Shared Lock, Read Lock, 읽기 잠금 ) : select
- 읽기 활동을 할 때만 일어난다.
- 공유잠금 끼리는 충돌하지 않는다.
- 공유잠금이 걸린동안 DML( Insert, Update, Delete )를 할 수 없다.
- transaction isolation을 REPEATABLE READ로 만들어준다.
- 배타적 잠금 ( Exclusive Lock, Write Lock, 쓰기 잠금 ) : Insert, Update, Delete
- 배타적 잠금이 걸리면 하나의 리소스만 해당 부분을 점유할 수 있다.
Row-level loock
- record 단위로 걸리는 Lock
- S lock과 X lock이 있다.
- S lock : 공유 락, 읽기 락이며 select ..for share 로 건다. row에 lock을 걸어도 다른 트랜잭션에서 해당 row를 읽을 수 있고, 쓰기는 불가능 하다.
- X lock : 배타적 락, 쓰기 락, select ...for update로 건다. Update, Delete시 발생하는 lock, 걸고나면 다른 트랜잭션에서 읽기/쓰기 전부 안된다.
Record Lock
- DB의 Index record에 걸리는 락이다.
- 이미 존재하는 record에 대해 걸리는 락이므로
Gap Lock
- DB index record중 index에 포함되지 않은 부분들에 락을 건다.
- 조건에 새로운 행이 들어오는걸 막기 위해 존재한다.
- 내가 조작을 하려는 후보군에 rock을 걸기 때문에 repeatable read수준의 격리수준을 가지려면 gap lock이 이용되어야 한다.