DB Locking이란

비구름·2025년 8월 17일

데이터베이스

목록 보기
8/8

DB Locking이란

동시성을 위해 데이터에 접근하는 커넥션을 제어하는 것으로 Lock을 통해 일부 커넥션 혹은 전체 커넥션의 접근을 막는 것을 말합니다.

Lock 모드 종류

락이 가지는 권한 수준을 말합니다.

Shared Lock

공유 락이라고도 불리며 보통 읽기 명령에서 사용되는 락입니다.

공유 락끼리 동시에 접근이 가능하지만 베타 락은 접근이 불가능합니다.

읽기 명령에서 공유 락을 사용하는 이유

여러 커넥션에서 동시에 읽기 명령을 진행하더라도 이상 현상이 발생하지 않아 공유 락으로 처리됩니다.

Exclusive Lock

베타 락으로도 불리며 쓰기 명령에서 사용되는 락입니다.

다른 공유 락과 베타 락의 접근을 막습니다.

쓰기 명령에서 베타 락을 사용하는 이유

여러 커넥션에서 쓰기 명령이 동시에 진행되는 경우 이전 변경 기록이 없어지는 갱신 분실과 같은 쓰기 이상 현상이 발생하기 때문입니다.

Update Lock

업데이트 락은 수정을 위해 베타 락을 걸기 전에 Conversion Deadlock을 방지하기 위해 사용되는 락입니다.

Conversion Deadlock이란?

읽기 → 쓰기로 진행되는 커넥션이 2개가 존재할때 읽기는 공유락으로 진행되지만 쓰기는 베타 락으로 진행되어 자신의 공유락은 포기하지 않고 베타락을 얻기위한 대기로 데드락이 발생할 수 있습니다.

Intent Lock

내제 락으로도 불리며 사용자가 범위를 지정하여 락을 걸 수 있는지 파악하기 위해 사용되는 락입니다.

row, page, table등 여러 계층에서 락을 걸 수 있습니다.

다른 락과 다르게 실제로 해당 범위에 락을 거는 것이 아닌 해당 범위에 락을 걸 것이라는 신호에 가깝습니다.

락 전략 종류

어떤 방식으로 락을 언제, 어떻게 사용할지 정하는 전략입니다.

Optimistic Lock

낙관적 락으로 락 없이 진행한 후 커밋 시 버전 체크로 충돌을 감지하는 것입니다. 만약 충돌이 발생한다면 재시도, 롤백과 같은 방법으로 극복합니다.

변경 가능성이 낮아 동시에 접근이 자주 일어나지 않는 경우 사용합니다.

동시성이 높고 락 오버헤드가 적다는 장점이 있습니다. 하지만 충돌과 안정성이 낮습니다.

Pessimistic Lock

비관적 락으로 트랜잭션 시작 시 (공유, 배제)락을 걸고 명령을 실행합니다.

변경 가능성이 높아 동시에 접근이 자주 일어날 경우 사용합니다.

충돌과 안정성이 높다는 장점이 있지만 동시성이 낮고 잠금 대기가 발생합니다.

profile
기본부터 정리해나가는 기록용 블로그

0개의 댓글