[ mysql ] deadlock 해결 방안 중 한가지(SELECT ~ FOR UPDATE)

JooKit 주킷 2021. 12. 15. 11:19
목차 접기
728x90
반응형
SELECT ~ FOR UPDATE

SELECT ~ FOR UPDATE를 실행하면 특정 세션이 데이터에 대해 수정을 할 때까지 LOCK이 걸려 다른 세션이 데이터에 접근할 수 없다고 한다.

위 이미지를 참고하면 A 사용자가 SELECT ~ FOR UPDATE를 실행하여 잔여 좌석정보를 SELECT 했고 해당 ROW는 다른 세션들이 접근할 수 없는 LOCK 에 걸린다. 이 때, B가 SELECT로 접근하려 해도 A가 LOCK을 가지고 있기에 A가 LOCK을 풀어줄 때까지 대기상태에 빠진다.

이후 A가 잔여좌석 수를 UPDATE하면서 LOCK이 풀리고 B는 SELECT 및 UPDATE가 가능해진다.

 

 

 

아래 블로그에서 참고한 자료로 실무에서 작업 해결에 큰 도움을 받았다ㅠㅠ.... 

저 쿼리 두 단어로...,, deadlock 해결...

 

 

 

https://dololak.tistory.com/446

 

[Database] SELECT ~ FOR UPDATE 란?

SELECT ~ FOR UPDATE란 SELECT ~ FOR UPDATE 구문은 "데이터 수정하려고 SELECT 하는 중이야~ 다른 사람들은 데이터에 손 대지 마!" 라고 할 수 있습니다. 좀 더 딱딱한 표현으로는 동시성 제어를 위하여 특정

dololak.tistory.com

 

728x90
반응형
LIST