TIL

2024.07.22 gap lock

Gisungcu 2024. 7. 22. 23:04

 

 

InnoDB의 Lock 처리 방식 - miintto.log

필자가 속한 개발팀의 여러 Django 프로젝트에서는 데이터베이스의 동시성을 제어하기 위해 select_for_update() 메소드가 적용되어 있습니다. 비슷하게 SQLAlchemy 라이브러리에서는 with_for_update() 메소

miintto.github.io

select for update를 이어서 보면..

mysql에서는 next key lock을 사용한다(innodb repeatable read). gap lock과 record lock을 합친 형태.

인덱스를 걸지 않은 컬럼에 사용하면 테이블 fullscan하니 테이블 전체에 lock이 걸린다. 조심하라. 

 

 

https://miintto.github.io/docs/mysql-select-for-update

uk를 조건에 사용하면 next key lock을 사용하지 않고 단일 레코드에만 record lock을 잡는다.

일반 secondary index는 range scan 하고 gap lock을 잡는다고 한다.

음.

index range scan은 tree 검색으로 이뤄져서 검색된 부분에 전부 lock을 거는 건가.

secondary index에서 equals 검색 시 gap lock은 걸리는 것인가.

아래 내용을 보면 uk가 아닌 조건에서는 gap lock을 사용한다고 쓰여있다.

음.. 내부에서 자체적으로 index 사용여부에 따라서 gap lock을 사용할지 말지 정하는 거 같은데

uk는 잠금이 필요 없는 이유가 무엇인가.

고유하지 않기 때문에 조회 전 후로 조회된 레코드 사이를 잠그는 것 같다.

uk는 고유하니 굳이 앞뒤로 잠글 필요없고

 

 

MySQL :: MySQL 8.4 Reference Manual :: 17.7.2.1 Transaction Isolation Levels

17.7.2.1 Transaction Isolation Levels Transaction isolation is one of the foundations of database processing. Isolation is the I in the acronym ACID; the isolation level is the setting that fine-tunes the balance between performance and reliability, consi

dev.mysql.com

 

 

 

 

[MySQL] B-Tree로 인덱스(Index)에 대해 쉽고 완벽하게 이해하기

인덱스를 저장하는 방식(또는 알고리즘)에 따라 B-Tree 인덱스, Hash 인덱스, Fractal 인덱스 등으로 나눌 수 있습니다. 일반적으로 B-Tree 구조가 사용되기 때문에 B-Tree 인덱스를 통해 인덱스의 동작

mangkyu.tistory.com

 

 

 

 

, UK

 

MySQL Unique Index에 대해서

유니크 인덱스에 대한 정보

hyeonproject.medium.com

uk와 secondary index는 '읽기'에서는 차이가 거의 없는데 secondary index는 단지 읽을 값이 더 많다는 것.

uk의 '쓰기'는  중복 체크 과정이 있다.