TIL
2024.08.07 gap lock
Gisungcu
2024. 8. 7. 23:23
InnoDB의 Lock 처리 방식 - miintto.log
필자가 속한 개발팀의 여러 Django 프로젝트에서는 데이터베이스의 동시성을 제어하기 위해 select_for_update() 메소드가 적용되어 있습니다. 비슷하게 SQLAlchemy 라이브러리에서는 with_for_update() 메소
miintto.github.io
Gap lock이 걸리는 쿼리는 많습니다.
Pk,uk를 사용했다고 안걸리는 것이 아닌 데이터 유무, where 조건에 따라 결정되니다.
Pk기준으로 Equals비교는 값의 유무에 따라 gap lock이 결정되니다.
범위연산의 경우는 gap lock이 적용됩니다.이들은 phantom read에 영향이 있는 locking read, update, delete의 경우입니다.Insert는 gap lock을 걸지 않지만 insert from select는 select절에 대해서 shared next key lock을 겁니다.
그래서 대부분 이 sql이 S lock을 건다고들 알고 있습니다.