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) 요약
- S 잠금을 보유한 트랜잭션은 다른 트랜잭션이 S 잠금을 요청할 경우 이를 동시에 승인할 수 있습니다.
여러 트랜잭션이 동시에 읽을 수 있게 됩니다. - S 잠금을 보유한 트랜잭션은 다른 트랜잭션이 X 잠금을 요청할 경우 이를 승인할 수 없습니다.
즉, T2는 T1이 잠금을 해제할 때까지 기다려야 합니다. - X 잠금을 보유한 트랜잭션은 다른 트랜잭션이 S 잠금이나 X 잠금을 요청할 경우 모두 승인할 수 없습니다.
T2는 T1이 잠금을 해제할 때까지 기다려야 합니다.
이러한 방식으로 InnoDB는 다중 트랜잭션 환경에서 데이터의 일관성과 동시성을 유지할 수 있게 됩니다.
'Mysql Reference Manual' 카테고리의 다른 글
[MySQL Reference Manual] DB 커넥션 풀 (0) | 2024.12.15 |
---|