Backend/Mysql

[Mysql] Lock Type

제이동 개발자 2024. 10. 27. 17:24
728x90

Lock Type

1. Share Lock(공유락)

 공유 락(Share Lock)은 다른 트랜잭션이 읽기는 가능하지만, 쓰기는 제한하는 락이다. 여러 트랜잭션이 동시에 공유 락을 걸 수 있으므로 동시에 데이터를 읽을 수 있지만, 데이터를 변경하는 작업은 허용하지 않는다. 즉, 데이터를 읽을 동안 데이터 변경을 반지해야 하는 경우에 사용된다.

-- id = 1인 행을 읽기가 완료될 때까지 수정이 불가하다.
SELECT * FROM my_table WHERE id = 1 LOCK IN SHARE MODE;

 

 

2. Exclusive Lock(배타적 락)

 배타적 락(Exclusive Lock)은 다른 트랜잭션이 해당 데이터에 대해 읽기와 쓰기 모두 접근하지 못하게 완전히 잠그는 락이다. 한 트랜잭션이 배타적 락을 설정하게 되면 다른 모든 트랜잭션은 해당 데이터에 대해 접근할 수 없게 된다. 주로 데이터가 변경 될 때 사용되며 다른 트랜잭션은 배타적 락이 해제될 때까지 대기해야 한다.

-- id = 1인 행을 수정할 수 있도록 배타적 락을 건다.
SELECT * FROM my_table WHERE id = 1 FOR UPDATE;

 

 

3. Intention Lock(의도적 락)

 의도적 락(Intention Lock)은 여러 트랜잭션이 동시에 하나의 테이블에 대해 락을 요청할 때 교착 상태를 피하도록 돕는다. 즉, 의도적 락은 락 계층 구조에서 충돌을 방지하고, 특정 행에 락을 설정하기 전에 테이블에 먼저 락 의도를 표시함으로써 성능을 높이는 데 사용된다.

 

읽기 or 쓰기 예시

  1. 테이블에 IS(읽기) or IX(쓰기) Lock을 건다.
  2. ROW에 S(읽기) or X(쓰기) Lock을 건다.

 

IS(Intention Shared)

 트랜잭션이 테이블 내 일부 행에 대해 공유 락을 요청할 의도가 있음을 나타낸다.

 

IX(Intention Exclusive)

 트랜잭션이 테이블 내 일부 행에 대해 배타적 락을 요청할 의도가 있음을 나타낸다.

 

728x90