본문 바로가기

Mysql Reference Manual

[Mysql Reference Manual] 공유 락 & 배타 락

 

1) 공유 락  & 배타 락

- InnoDB의 행 수준 잠금(row-level locking)에서는 공유 잠금(shared lock, S 잠금)과 배타 잠금(exclusive lock, X 잠금)

  두 가지 유형의 잠금을 사용합니다. 이 잠금들이 어떻게 작동하는지에 대해 좀 더 구체적으로 설명해보겠습니다.

 

(1) 공유 잠금 (Shared Lock, S 잠금)

  • 공유 잠금(S 잠금)은 읽기 전용 잠금입니다.
  • 트랜잭션 T1이 행 r에 대해 공유 잠금을 가지고 있다면, T1은 이 행을 읽을 수 있습니다.
  • 다른 트랜잭션 T2가 이 행에 대해 공유 잠금(S 잠금)을 요청하면, 이는 즉시 승인될 수 있습니다.
    즉, T1과 T2가 모두 공유 잠금을 가지게 됩니다.
    이를 통해 두 트랜잭션은 동시에 이 행을 읽을 수 있습니다.

(2) 배타 잠금 (Exclusive Lock, X 잠금)

  • 배타 잠금(X 잠금)은 읽기, 쓰기, 수정, 삭제 모두에 대해 독점적인 잠금을 제공합니다.
  • 트랜잭션 T1이 행 r에 대해 배타 잠금을 가지고 있으면, T1은 해당 행을 수정하거나 삭제할 수 있습니다.
  • 다른 트랜잭션 T2가 이 행에 대해 배타 잠금(X 잠금)을 요청하거나, 공유 잠금(S 잠금)을 요청하면,
    두 경우 모두 즉시 승인되지 않습니다.
    T2는 T1이 잠금을 해제할 때까지 기다려야 합니다.

(3) 요약

  1. S 잠금을 보유한 트랜잭션은 다른 트랜잭션이 S 잠금을 요청할 경우 이를 동시에 승인할 수 있습니다.
    여러 트랜잭션이 동시에 읽을 수 있게 됩니다.
  2. S 잠금을 보유한 트랜잭션은 다른 트랜잭션이 X 잠금을 요청할 경우 이를 승인할 수 없습니다.
    즉, T2는 T1이 잠금을 해제할 때까지 기다려야 합니다.
  3. X 잠금을 보유한 트랜잭션은 다른 트랜잭션이 S 잠금이나 X 잠금을 요청할 경우 모두 승인할 수 없습니다.
    T2는 T1이 잠금을 해제할 때까지 기다려야 합니다.

이러한 방식으로 InnoDB다중 트랜잭션 환경에서 데이터의 일관성동시성을 유지할 수 있게 됩니다.

'Mysql Reference Manual' 카테고리의 다른 글

[MySQL Reference Manual] DB 커넥션 풀  (0) 2024.12.15