카샤의 만개시기

MySQL에서 동시성 문제를 해결하기 위한 Lock 본문

Database/mySQL

MySQL에서 동시성 문제를 해결하기 위한 Lock

SKaSha 2019. 7. 9. 01:29

InnoDB에서 잠금은 두가지로 나눌 수 있다.

  • FOR SHARE (LOCK IN SHARE MODE)
  • FOR UPDATE

FOR SHARE (LOCK IN SHARE MODE)

트랜잭션이 끝날 때까지 SELECT를 한 Row 값이 변경되지 않는 것을 보장한다.
해당 Row를 수정하려는 쿼리는 잠김 상태가 되어 트랜잭션이 끝날 때까지 대기하게 되고, 조회 쿼리는 여러 세션이 동시에 수행하는 것이 가능하다.
이는 트랜잭션이 끝나기 전까지만 유효하므로 auto_commit을 꺼야 한다.

SELECT name FROM user WHERE id = 1 LOCK IN SHARE MODE; # 5.7
SELECT name FROM user WHERE id = 1 FOR SHARE; # 8.0
# 8.0 버전에서는 하위 호환성을 위해 LOCK IN SHARE MODE도 동작을 한다. 
하지만 FOR SHARE를 이용하였을 때 추가 옵션을 줄 수 있다.

FOR UPDATE

트랜잭션이 끝날 때까지 SELECT로 가져온 Row에 대해 다른 세션의 SELECT, UPDATE, DELETE 등의 쿼리가 모두 잠김 상태가 된다.

SELECT name FROM user WHERE id = 1 FOR UPDATE

'Database > mySQL' 카테고리의 다른 글

Mysql 8.0 Architecture  (0) 2021.12.05
MySQL HA (Replication, Group Replication, Galera Cluster)  (1) 2019.07.02
Comments