본 포스팅은 DB Lock에 대해서 포스팅 하고자 한다.
Lock이란
Lock이란 데이터베이스에서 동시성과 데이터 일관성을 보장하기 위해 사용되는 메커니즘이다.
예를 들어, 여러 사용자(트랜잭션)들이 동시에 같은 데이터에 접근하려고 할 때
데이터베이스는 Lock을 사용하여 해당 데이터를 사용하고 있는 사용자(트랜잭션)와 다른 사용자(트랜잭션)들 간의 접근을 제어하여 충돌을 방지한다.
Lock의 종류
Lock의 종류에는 크게 공유 락 (Shared Lock)과 베타 락 (Exclusive Lock)이 있으며,
공유 락은 다른 말로 Read Lock 이라고 불리며 베타 락은 Write Lock 이라고 불린다
- 공유 락 (Shared Lock)
공유 락은 데이터를 변경하지 않는 읽기 명령에 대해 주어지는 락으로서 Read Lock이라고도 불린다.
- 여러 사용자가 동시에 데이터를 읽어도 데이터 일관성에는 아무런 영향을 끼치지 못하기 때문에 공유 락끼리는 동시에 접근이 가능하다. 하지만 공유 락이 설정된 데이터에 베타 락을 사용할 수는 없다.
- 베타 락 (Exclusive Lock)
베타 락은 데이터에 변경을 가하는 명령들에 대해 주어지는 락으로 Write Lock으로 불리며, X로 표기한다.
- 베타 락은 이름 그대로 Lock이 해제될 때까지 다른 트랜잭션에서 해당 자원에 대한 접근 (Select, Insert, Delete, Update) 하는 것을 막는다.
- 그리고 베타 락은 트랜잭션이 완료될 때까지 유지되고 또한, 공유 락과 달리 다른 트랜잭션이 수행하고 있는 데이터에 대해 접근하여 함께 Lock을 설정할 수 없다
블로킹 (Blocking) & 교착 상태 (DeadLock)
- 블로킹 (Blocking)

블로킹은 Lock 간 (베타-베타, 베타-공유)의 경합이 발생하여 특정 트랜잭션이 작업을 진행하지 못하고 멈춰선 상태를 말한다.
- 위에서 설명했다싶이, 공유 락 끼리는 블로킹이 발생하지 않지만 베타 락은 블로킹을 발생시키므로 블로킹을 해소하기 위해서는 이전의 트랜잭션이 완료 (commit 또는 rollback) 되어야 한다.
- 이후에 들어온 트랜잭션은 이전 트랜잭션이 마무리되어야 이후 진행이 가능하기 때문에 이러한 경합은 성능에 좋지 않은 영향을 미치므로 경합을 최소화 할 필요가 있다.
[참고] 데이터베이스 시스템을 사용하는 시스템에서의 주의 사항
① 한 트랜잭션의 길이(시간)를 너무 길게 하는 것은 위에서 말한 것처럼 경합의 확률을 올리게 되므로 설계할 때, 같은 데이터를 갱신하는 트랜잭션이 동시에 수행되지 않도록 해야 한다.
② 트랜잭션 격리성 수준을 불필요하게 상향 조정하지 않도록 해야 하는데, 이는 데이터 일관성을 향상시키지만 반대로 동시성이 떨어져 블로킹 상태가 다수 발생할 수 있다.
③ Query를 오랜시간 잡아두지 않도록 시스템 환경에 맞추어 DB에서의 적절한 튜닝을 진행하도록 한다.
- 교착 상태 (DeadLock)

교착 상태는 두 트랜잭션이 각각 Lock을 설정하고 다음 서로의 Lock에 접근하여 값을 얻고자 할 때, 이미 각각의 트랜잭션에 의해 Lock이 설정되어 있기 때문에 양쪽 트랜잭션 모두 영원히 처리가 되지않게 되는 상태를 말한다.
- 위의 그림처럼 트랜잭션 A는 game_master 테이블에 베타 락을 설정하였고 트랜잭션 B는 game_detail 테이블에 베타 락을 설정하였다.
- 이후에 트랜잭션 A는 game_detail 테이블에 트랜잭션 B는 game_master 테이블에 락을 설정하려고 시도하나 이미 각각의 테이블은 서로 다른 트랜잭션에 의해 베타 락이 설정되어 있기 때문에 트랜잭션 A, B는 Lock이 해제되기를 서로 기다리는 상태가 된다.
- 하지만 이 Lock은 풀리지 않을 서로의 트랜잭션을 기다리므로 영원히 풀리지 않는 데드락 상태가 되어버린다.
- 따라서, 교착 상태가 발생하면 DBMS에서는 둘 중 한 트랜잭션에 에러를 발생시킴으로써 데드락 문제를 해결하며 교착 상태가 발생할 가능성을 줄이기 위해서는 접근 순서를 동일하게 하는 것이 중요하다.
- 즉, 위의 예제를 예로 든다면 game_master 테이블을 업데이트 한 후에 game_detail 테이블을 업데이트 한다와 같은 규칙을 통해 테이블 접근의 교차가 일어나지 않도록 함으로써 교착 상태를 예방하는 것이다.
참조 : https://shuu.tistory.com/88
DB Lock 기초
1) DB Lock 기초 (1) Lock이란 Lock이란 데이터베이스에서 동시성과 데이터 일관성을 보장하기 위해 사용되는 메커니즘이다. 예를 들어, 여러 사용자(트랜잭션)들이 동시에 같은 데이터에 접근하려고
shuu.tistory.com