IT 개발 라이프/DB

데이터베이스(DB) Lock

10Biliion 2024. 12. 26. 16:17

데이터베이스에서 Lock은 동시성 제어의 핵심 메커니즘으로, 여러 트랜잭션이 동시에 데이터를 접근하거나 변경할 때 데이터 무결성을 보장하기 위해 사용됩니다.


1. Lock의 개념

Lock은 트랜잭션이 특정 데이터나 자원에 대해 접근할 때 다른 트랜잭션이 해당 데이터나 자원에 접근하지 못하도록 제한하는 메커니즘입니다. 이는 데이터의 무결성을 보장하고 교착 상태(Deadlock)나 경합 상태(Race Condition)를 방지하는 데 사용됩니다.

Lock이 필요한 이유

  • 데이터 무결성 보장
  • 트랜잭션 간 충돌 방지
  • 동시성 문제 해결

2. Lock의 종류

Lock은 여러 기준에 따라 분류됩니다. 주요 분류는 다음과 같습니다:

2.1. 잠금 수준에 따른 분류

  1. Row-Level Lock
    • 특정 행(Row)에만 잠금을 설정합니다.
    • 동시성을 극대화할 수 있지만, 관리 오버헤드가 증가합니다.
  2. Table-Level Lock
    • 테이블 전체에 잠금을 설정합니다.
    • 간단하지만 동시성을 저하시킬 수 있습니다.
  3. Page-Level Lock
    • 데이터 페이지 단위로 잠금을 설정합니다.
    • 행 수준과 테이블 수준의 중간 수준 동시성을 제공합니다.

2.2. Lock 모드에 따른 분류

  1. 공유 락 - Shared Lock (S Lock)
    • 데이터를 읽기 전용으로 잠금합니다.
    • 다른 트랜잭션은 데이터를 읽을 수 있지만, 쓰기는 불가능합니다.
  2. 베타 락 - Exclusive Lock (X Lock)
    • 데이터를 읽거나 쓰는 작업에 대해 완전히 잠금합니다.
    • 다른 트랜잭션은 데이터를 읽거나 쓸 수 없습니다.

2.3. 동작 방식에 따른 분류

  1. Pessimistic Lock
    • 트랜잭션이 시작되면 다른 트랜잭션의 접근을 적극적으로 차단합니다.
    • Deadlock 가능성이 있으므로 관리가 필요합니다.
  2. Optimistic Lock
    • 충돌 가능성을 낮게 보고, 트랜잭션 종료 시점에 충돌 여부를 검증합니다.
    • 충돌이 빈번하지 않은 환경에 적합합니다.

3. Lock의 특징

  1. 동시성 제어
    • 여러 트랜잭션이 데이터를 동시에 접근하더라도 무결성을 유지합니다.
  2. 교착 상태 (Deadlock) 관리
    • 교착 상태를 방지하거나 해결하기 위한 메커니즘이 필요합니다.
  3. 성능 고려
    • 잠금 설정은 성능 저하를 유발할 수 있으므로 신중히 사용해야 합니다.
  4. 잠금 타임아웃
    • Lock은 일정 시간 동안만 유지되며, 시간이 초과되면 트랜잭션은 롤백됩니다.
 

4. 블로킹(Blockings)과 Lock

**블로킹(Blockings)**은 트랜잭션이 다른 트랜잭션의 Lock으로 인해 대기 상태에 놓이는 현상을 말합니다. 이는 데이터베이스에서 Lock을 사용할 때 종종 발생하며, 동시성 제어와 성능에 중요한 영향을 미칩니다.

블로킹의 주요 원인

  1. 긴 트랜잭션
    • Lock을 장시간 유지하면 다른 트랜잭션이 대기 상태로 전환됩니다.
  2. 과도한 Lock 경합
    • 동일한 리소스에 여러 트랜잭션이 접근할 경우 블로킹이 발생할 가능성이 높습니다.
  3. Lock Escalation
    • 낮은 수준(Row-Level) Lock이 테이블 전체(Table-Level) Lock으로 확장될 때 블로킹이 유발됩니다.

블로킹 해결 방법

  1. 트랜잭션 단축
    • 트랜잭션 범위를 최소화하여 Lock 유지 시간을 줄입니다.
  2. 적절한 Lock 레벨 설정
    • 경합이 많은 환경에서는 Row-Level Lock을 활용하여 동시성을 높입니다.
  3. 쿼리 최적화
    • 쿼리 실행 시간을 줄이고 Lock이 걸리는 시간을 단축합니다.
  4. 타임아웃 설정
    • 대기 시간이 초과되면 트랜잭션을 중단시키는 방식으로 블로킹을 방지합니다.

5. Lock의 장단점

5.1. 장점

  1. 데이터 무결성과 일관성 보장
  2. 동시성 제어로 안정성 향상
  3. 충돌 방지로 애플리케이션 신뢰성 증대

 

5.2. 단점

  1. 성능 저하 가능성
  2. 교착 상태 발생 위험
  3. 구현 복잡성 증가
  4. 블로킹에 의한 대기 시간 증가

6. 결론

데이터베이스 Lock은 데이터 무결성을 보장하고 동시성을 제어하는 데 필수적인 메커니즘입니다. 하지만 잠금으로 인해 발생하는 성능 저하, 교착 상태, 블로킹과 같은 문제를 고려하여 적절히 활용하는 것이 중요합니다.