-
2024.07.27~28 gap lockTIL 2024. 8. 1. 00:42
락 관련 문서
MySQL Gap Lock (두번째 이야기)
Why ?
medium.com
위의 글을 보면 데이터 페이지에 따른 잠금을 소개하고 있다..
실제 개발 시 이런 것까지 확인하기는 힘든데, 이로 인해 잠금이 발생한 다는 것을 모를 수 있다.
gap lock을 사용하는 쿼리를 사용할 때 데이터 페이지에 마지막이 조건의 끝에 들어간다면 supremum pseudo-record에 락을 잡는다는 것이다.
존재하지 않는 행에 대한 gap lockSELECT … FOR UPDATE on non-existent rows
i am interested about locks when "select ... for update on non-existed rows"; currently, the data in table 'test02' is as blow: id 1 3 8 15 20 the column id is primary key; when i run :
stackoverflow.com
반복하지만 uk, pk가 아니면 gap lock을 사용한다.
다만 값이 없을 때는 gap lock이 사용된다.
값이 없을 때 pk, uk도 gap lock을 사용하는가?
gap에 잠금이 걸리는데 이는 pk인데 값이 없어서 gap lock이 잡히는 거 같다.
pk, uk가 아니면 equals 비교라도 gap lock이 걸린다
select .. for update 대상 유무에 따른 잠금 상태
개요 InnoDB 엔진은 기본적으로 DDL 쿼리를 제외한 모든 데이터 조작 작업에서 테이블 락을 사용하지 않고 레코드 기반의 잠금 방식을 사용합니다. 더 자세히는 레코드 자체보다는 인덱스에 잠금
dkswnkk.tistory.com
결론적으로 겹치는 범위 조회의 경우 비어 있는 테이블 상황에서는 select.. for update 구문이 즉시 실행되고 실제 데이터 삽입 시점에서만 다른 트랜잭션의 완료를 대기합니다. 반면 범위 내에 실제 데이터가 존재하는 경우에는 조회 단계부터 다른 트랜잭션의 완료를 대기하게 됩니다
MySQL: A deadlock occurred when deleting the same row
Recently I encountered a deadlock when deleting records (Note that the isolation level is REPEATABLE READ, MySQL 5.7) Here is the repro steps 1 Create a new table CREATE TABLE `t` ( `id` bigint(2...
stackoverflow.com
update 쿼리를 통해 gap lock이 잡힌 곳으로 update 할 때 waiting을 하게 된다.
update child set id = id+10 where id = 101;
gap lock 예제
MySQL gap lock, next key lock by example
MySQL’s gap lock or next key lock is a specific mechanism to guarantee it’s isolation level. Gap lock is set on before or after values of the accessed record. Next key lock is the acces…
tkstoneblog.wordpress.com
이 예제 처럼 작성하는 게 좋을 듯
equals 비교라도 값이 없으면?MySQL gap lock behavior isn't in line with expectation
Problem description: In mysql 8.0, I started a transaction and executed SELECT * FROM child WHERE id > 1000 FOR UPDATE; (transaction one), then I started another transaction and executed update ...
stackoverflow.com
범위 검색에 대한 gap lock
Next-key lock explication - Primary key for range
I have the following query, and I wanted to use the diagram to CONFIRM IF I UNDERSTAND IT RIGHT: SELECT * FROM table WHERE pk > 99; "pk" is the primary key I am having trouble
stackoverflow.com
pk도 범위 검색을 하면 gap lock을 잡는다.
pk는 equals 검색일 때만 gap lock을 잡지 않는다는 것.
MySQL :: MySQL 8.4 Reference Manual :: 17.7.1 InnoDB Locking
MySQL 8.4 Reference Manual / ... / The InnoDB Storage Engine / InnoDB Locking and Transaction Model / InnoDB Locking This section describes lock types used by InnoDB. Shared and Exclusive Locks InnoDB implements standard row-level locking w
dev.mysql.com
다만 gap lock은 서로 읽기는 가능하기에 막지 않는다.
이유는 문서를 보면 알 수 있는데 insert를 막기 위함인 것이기 때문이다.
락
[MySQL] 스토리지 엔진 수준의 락의 종류(레코드 락, 갭 락, 넥스트 키 락, 자동 증가 락)
이번에는 스토리지 엔진 수준의 락의 종류에 대해 알아보도록 하겠습니다. 아래의 내용은 RealMySQL과 MySQL 공식 문서 등을 참고하여 작성하였으며, 모든 내용은 InnoDB를 기준으로 설명합니다. 1. 스
mangkyu.tistory.com
- 잠금 시 인덱스에 검색되는 모든 부분에 잠금이 걸린다.
- 갭 락은 정렬된 순서로 존재하므로 앞뒤로 잠금을 건다.
- 인덱스가 있더라도 이미 존재하는 데이터의 조건만 맞으면 모든 부분에 락이 걸릴 수 있다는 것이다.
https://mangkyu.tistory.com/298 'TIL' 카테고리의 다른 글
2024.08.02~04 Locks Set by SQL 2 (0) 2024.08.04 2024.08.01 Locks Set by SQL (0) 2024.08.01 2024.07.23 gap lock (0) 2024.07.23 2024.07.22 gap lock (0) 2024.07.22 2024.07.21 select for update (0) 2024.07.21