programming/database

데이터베이스 Lock의 종류

worldint 2024. 10. 26. 15:58

 

Lock 이란

여러 커넥션에서 동시에 동일한 자원을 요청할 경우

순서대로 하나의 커넥션만 변경할 수 있게 해주는 기능

동시성을 제어하기 위한 기능

 

 

Lock의 종류

1. Shared Lock (공유 락)

  • 특징: 여러 트랜잭션이 동시에 특정 데이터(주로 읽기 작업)를 공유할 수 있도록 허용하는 Lock입니다.
  • 용도: 데이터를 읽기 위해 사용되며, 다른 트랜잭션이 해당 데이터에 대해 쓰기 잠금을 걸 수 없도록 합니다.
  • 장점: 여러 트랜잭션이 동시에 데이터를 읽을 수 있기 때문에 읽기 작업의 효율성을 높일 수 있습니다.
  • 단점: 쓰기 작업이 지연될 수 있습니다.

2. Exclusive Lock (배타 락)

  • 특징: 한 트랜잭션만 특정 데이터에 접근할 수 있도록 허용하는 Lock입니다. 주로 쓰기 작업을 위해 사용됩니다.
  • 용도: 데이터를 수정하거나 삽입할 때 사용되며, 다른 트랜잭션은 해당 데이터에 대해 접근할 수 없습니다.
  • 장점: 데이터 수정 중에 일관성을 유지할 수 있습니다.
  • 단점: 다른 트랜잭션이 해당 데이터에 접근할 수 없어 대기 시간이 증가할 수 있습니다.

3. Intent Lock (의도 락)

  • 특징: 테이블이나 페이지 수준에서 락이 필요하다는 것을 나타내기 위해 사용하는 Lock입니다.
    공유 락 또는 배타 락을 걸기 전에, 데이터베이스 엔진은 Intent Lock을 먼저 사용하여 의도를 표시합니다.
  • 용도: 계층적인 락 관리를 위해 사용되며, 상위 객체에 락을 걸기 전에 하위 객체의 락 설정을 표시하기 위해 사용됩니다.
  • 장점: 데이터베이스 엔진의 락 관리를 간소화하고 Deadlock을 방지하는 데 도움을 줍니다.
  • 단점: 추가적인 락을 관리해야 하므로 약간의 오버헤드가 있을 수 있습니다.
  • 추가 설명: A,B 사용자가 있음,
    A가 특정 row를 변경하고 있을때,
    B가 그 테이블의 스키마를 변경하려고 할 때 B가 모든 로우에 락이 걸려있나를 확인 하면 비효율적이니
    데이터베이스가 그 row의 상위 객체(페이지,테이블 등) 들에 대해서 Lock을 거는것이 intent lock이다

4. Update Lock

  • 특징: 공유 락과 배타 락의 중간 성격을 갖는 락입니다. 처음에는 데이터를 읽기 위해 공유 락처럼 작동하지만, 실제로 데이터를 수정하기 전에 배타 락으로 전환됩니다.
  • 용도: 교착 상태(Deadlock)를 방지하기 위해 사용됩니다. 일반적으로 데이터의 수정이 필요할 때 데이터 읽기와 동시에 수정 작업이 예정되어 있을 경우 사용됩니다.
  • 장점: Deadlock 발생 가능성을 줄일 수 있습니다.
  • 단점: 배타 락과 공유 락의 단점을 동시에 가질 수 있습니다.

5. Row-Level Lock (행 단위 락)

  • 특징: 테이블의 개별 행에 대해 Lock을 거는 방식입니다.
  • 용도: 특정한 행만 수정하거나 읽을 필요가 있을 때 사용합니다.
  • 장점: 병행성을 높일 수 있어 여러 트랜잭션이 동시에 서로 다른 행을 처리할 수 있습니다.
  • 단점: 락의 수가 많아질 경우 락 관리 오버헤드가 커질 수 있습니다.

6. Table-Level Lock (테이블 단위 락)

  • 특징: 테이블 전체에 대해 Lock을 거는 방식입니다.
  • 용도: 대규모의 변경 작업을 수행할 때 사용되며, 트랜잭션 충돌을 방지하기 위해 사용합니다.
  • 장점: 락 관리가 간단하며, 전체 테이블에 대한 일관성을 보장할 수 있습니다.
  • 단점: 여러 트랜잭션이 동시에 작업할 수 없으므로 병행성이 낮아집니다.

7. Page-Level Lock (페이지 단위 락)

  • 특징: 데이터를 페이지 단위로 묶어서 락을 거는 방식입니다. 페이지는 보통 여러 개의 행으로 구성됩니다.
  • 용도: 테이블의 특정 부분만 락을 걸고자 할 때 사용됩니다.
  • 장점: 행 단위 락보다는 오버헤드가 낮고, 테이블 단위 락보다는 병행성을 높일 수 있습니다.
  • 단점: 병행성과 락 오버헤드 사이의 균형을 맞추기 어렵습니다.

8. Deadlock과 Lock Escalation

  • Deadlock: 두 개 이상의 트랜잭션이 서로의 락이 풀리기를 기다리면서 무한 대기 상태에 빠지는 것을 의미합니다. 이를 방지하기 위해 여러 가지 전략이 사용되며, 데이터베이스 엔진이 자동으로 교착 상태를 감지하고 트랜잭션을 중단시킬 수 있습니다.
  • Lock Escalation: 데이터베이스 시스템에서 너무 많은 작은 단위의 락이 걸리면 락 관리를 단순화하기 위해 더 큰 단위의 락으로 승격시키는 것을 의미합니다. 예를 들어, 여러 개의 Row-Level Lock을 하나의 Table-Level Lock으로 승격시킬 수 있습니다.