INSERT에서 shared lock을 거는 이유 질문
"DeadLock 예시(2)"에서 INSERT구문이 UNIQUE를 보장하기위해 shared lock을 걸고 확인한다고하였는데요, 그냥 처음부터 exclusive lock을 걸고 값을 확인하게 구현할 수도 있을 것 같은데, 그렇게 안되어있는 특별한 이유가 있을까요?
exclusive lock을 건 상태에서는 값이 있는지 확인이 불가능하다 (shared lock을 걸었을때만 가능하다)
그냥 어쩌다보니 MySQL이 그렇게 구현되어있다.
lock경합을 줄이기위한 의도로 이렇게 구현했다?
제가 생각나는 이유는 위 2개 정도인데, 어떤 이유인지 아실까요?
Câu trả lời 3
2
안녕하세요.
매우 중요한 질문을 주셨는데요.
UNIQUE INDEX가 있는 경우, INSERT를 실행할 때 먼저 중복된 레코드가 있는지 확인을 해야 하는데요.
만약 Exclusive Lock을 걸게 되면 동시 처리 성능이 떨어지게 되므로, 중복 레코드의 존재 여부까지는 Shared lock을 사용하는데,
만약 중복건이 있다면 Exclusive Lock이 필요치 않겠죠.
그리고 중복 건이 존재하지 않으면 INSERT를 수행 + INSERT 된 레코드에 Exclusive Lock을 거는 방법을 사용하게 됩니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
hoon님의 질문과 특정 내용으로 직접 연결되는 정보는 제공된 정보 내에서 찾을 수 없습니다. 그러나 관련된 주제로 데이터베이스 락 관련 개념이나 전략에 대한 이해를 돕는 건강한 토론이나 공부 자료는 전문가 문헌이나 인터넷 공개 자료를 통해 확인하실 수 있습니다. 예를 들어, MySQL 공식 문서나 데이터베이스 관련 서적에서는 다양한 락(Lock) 메커니즘과 그 구현 방법에 대해 자세히 설명하고 있습니다. 이와 관련하여 Spring Data JPA나 Spring Data JDBC의 락 사용 방법을 예로 들 수 있으며, 각각의 참조 문서에서는 언제, 어떤 상황에서 락을 사용해야 하는지에 대한 지침을 제공합니다.
불행히도, hoon님께서 질문하신 ‘INSERT에서 shared lock을 사용하는 이유’에 대한 직접적인 대답을 드리지는 못하지만, 일반적으로 락의 사용은 데이터의 무결성과 일관성을 유지하기 위해 필수적인 부분입니다. MySQL에서 shared lock과 exclusive lock은 서로 다른 목적으로 사용됩니다. Exclusive lock은 데이터를 변경할 때 다른 트랜잭션의 접극을 막기 위해 사용되고, shared lock은 여러 트랜잭션이 동시에 데이터를 읽을 수 있도록 하면서도, 해당 데이터가 변경되는 것을 방지하기 위해 사용되는데, 이는 동시성을 높이면서도 데이터의 일관성을 보장하기 위한 전략 중 하나입니다.
특정 상황에서 MySQL이 왜 shared lock을 우선적으로 사용하는지는 MySQL의 내부 구현 로직과 성능 최적화 전략에 대한 깊은 이해가 필요하며, 이는 MySQL의 공식 문서나 데이터베이스 시스템에 대한 깊은 공부를 통해 더 자세히 알아볼 수 있습니다.
이와 관련하여 더 깊이 있게 공부하고 싶으시다면, MySQL 공식 문서나 데이터베이스 시스템 설계에 관한 서적을 참고해 보시는 것을 추천드립니다.
라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항
0
21
2
JPA Repository 질문이 있습니다!
1
29
2
페이지네이션 처리를 쿼리에서 하는 방식 질문
1
31
1
DDD 는 마이바티스와 잘 맞지 않는건가요?
0
38
1
스프링부트 버전 문의드립니다.
0
28
1
Json 요청 처리
1
26
2
비동기 스레드풀 분리 이유와 Virtual Thread 전환 시 고려사항
0
26
1
gRPC 실무에서 질문
0
30
2
수강기간 연장
0
18
1
Build 관련 문제 (테스트 관련 문제)
0
30
1
unique index가 걸린 상황에서 s-lock, x-lock 질문
0
506
2
질문드립니다.
0
250
1
Real MySQL 시즌1 part 2 에피소드 16의 인덱스가 null인 컬럼을 포함한다는 것에 대한 질문
0
170
1
시퀸셜하게 증가하지 않는 PK의 insert성능도 문제가 있을까요?
0
222
2
파티셔닝의 자원 사용 효율 증가 관련 질문
1
644
2
안녕하세요. 인덱스 관련 질문 있습니다.
0
370
2
테이블이 1:N 구조에서 N쪽 테이블에 유니크 제약조건에 의한 오류발생 회피 방법이 뭘까요?
0
262
1
복합 인덱스의 컬럼중 선행 컬럼을 조건에서 누락해도 인덱스가 사용될 수도 있나요?
0
239
1
SKIP LOCKED 부분에서 INNER JOIN이 아니고 LEFT JOIN이 걸릴수 있다면
0
184
1
단일 인덱스 크기, 전체 인덱스 크기 구하는 계산식
0
235
2
primary key에 시간, uuid로 복합키로 설정하는 경우
0
325
2
에피소드 21에 궁금한 점이 있어 질문드립니다.
0
233
2
에피소드 17번에서 skip locked 질문이 있습니다.
0
264
1
Real MySQL 시즌 1 - Part 1 or Part2 영상에 나오는 자료 공유 가능하나요?
1
364
1

