DB Lock
Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법. 트랜잭션이란 논리적 기능을 수행하는 처리 단위이다.(쿼리의 묶음이라고 보면된다)
중요한 것은 DBMS마다 Lock을 구현하는 방식과 세부적인 방법이 다르다. 따라서 DBMS를 효과적으로 이용하기 위해서는 해당 DB의 Lock에 대한 이해가 요구됨
InnoDB는 row lock 개념을 사용하기 때문에 row 단위의 lock을 사용할 수 있다. 이를 통해서 사용되는 기본 Lock의 종류는 아래와 같다.
Shared Lock(공유 락)
- 공유 Lock은 데이터를 읽을 때 사용되어지는 Lock
- 이런 공유 Lock은 공유 Lock 끼리는 동시에 접근이 가능하다.
- 즉, 하나의 데이터를 읽는 것은 여러 사용자가 동시에 할 수 있다라는 것이다. 하지만 공유 Lock이 설정된 데이터에 베타락을 사용할 수는 없다.
→ Read 전용 Lock / 배타 락과 동시에 사용할 수 없다.
Exclusive Lock(베타 락)
- 베타 Lock은 데이터를 변경하고자 할 때 사용되며, 트랜잭션이 완료될 때까지 유지된다.
- 베타락은 Lock이 해제될 때까지 다른 트랜잭션(읽기 포함)은 해당 리소스에 접근할 수 없다.
- 또한 해당 Lock은 다른 트랜잭션이 수행되고 있는 데이터에 대해서는 접근하여 함께 Lock을 설정할 수 없다.
→ Write 전용 Lock / 트랜잭션이 완료될때까지 유지
Intention Locks
- row 및 table 단위에 대한 multiple granularity locking(다중 단위 잠금)을 구현하기 위해 도입된 개념이다.