Database Lock이란?
- 여러 트랜잭션이 동시에 처리될 때 데이터의 무결성을 보장하기 위한 수단
- 한 트랜잭션이 처리되고 있을 때, 다음 트랜잭션을 잠시 대기시컀다가 처리해 순차적으로 처리시킨다.
Lock의 종류
공유 락 (Shared Lock, Lock-S)
- 데이터를 읽을 때 사용하는 Lock이다.
- 그래서 Read Lock이라고 부른다.
- 공유 락이 설정된 데이터에는 다른 공유 락의 접근이 가능하다.
- 하나의 데이터를 여러 사람이 동시에 읽는 것은 가능하다라는 걸 의미한다.
- 그러나 공유 락이 설정된 데이터에는 배타 락은 접근할 수 없다.
배타 락 (Exclusive Lock, Lock-X)
- 데이터를 변경할 때 사용하는 Lock
- 그래서 Write Lock이라고 부른다.
- 배타 락이 설정된 데이터에 관해서는 다른 공유락 배타 락을 설정할 수 없다.
- 배타 락은 해당 트랜잭션이 완료될 때까지 유지된다.
Lock에서 발생할 수 있는 문제점
- 블로킹 (Blocking)
- Lock간의 경합(“공유 ↔ 배타” 또는 “배타 ↔ 배타”)이 발생 했을 때 트랜잭션이 멈춰선 상태
- 먼저 진행된 트랜잭션이 COMMIT 되거나 ROLLBACK되어야 진행이 가능하다.
- 교착상태 (DeadLock)
- 두 트랜잭션이 각자 다른 데이터에 배타 락을 설정해둔 후에,
서로 상대방의 데이터에 락을 설정하려고 할 때 발생한다. - 두 트랜잭션 모두 동작이 멈추게 된다.
- 두 트랜잭션이 각자 다른 데이터에 배타 락을 설정해둔 후에,