@백갤러3(14.52)
자세한 설명 가능한가요 레코드 락에서 충돌한다는 부분이 무슨 말씀이신지 정확히 모르겠습니다
백갤러 4(211.234)2025-05-09 01:30
답글
@백갤러3(14.52)
위 문서에서도 레코드 락은 해당 레코드에만 락을 거는 것이고, 새로운 삽입돠는 경우 (중복 허용) 시 아무 관련이 없다고 알고 있는데
백갤러 4(211.234)2025-05-09 01:39
답글
@백갤러4(211.234)
넥스트키락이 아닌 LOCK_MODE X,REC_NOT_GAP 으로 5 레코드만 레코드 락이 잡히더라도 insert 5 가 실패한다는 이야기 입니다.
A record lock is a lock on an index record. ~~ prevents any other transaction from inserting, updating, or deleting rows where the value of t.c1 is 10.
해당 내용에 정확하게 부합하는 상황이고, 직접 세션 두개로 상황 만들어서 performance_schema.data_locks 보시면 레코드락으로 인해서 insert가 방지되는것을 확인하실 수 있어요.
백갤러 3(14.52)2025-05-09 01:41
답글
@백갤러3(14.52)
애초에 상황 자체가 where 5를 정확하게 걸었으면 결과가 단건임이 보장되는 상황이 될 수 있어서 next key lock 이 아니라 레코드락만 걸리는걸 보실 수도 있을거예요.
gpt가 전반적으로 설명을 잘못한것같습니다.
백갤러 3(14.52)2025-05-09 01:45
답글
@백갤러3(14.52)
아 디시를 많이 안해봐서 댓글 길이 제한에 말이 좀 두서 없는데 수정도 안되는군요 ㅋㅋㅋㅋ.... 양해해주시면 감사하겠습니다...
백갤러 3(14.52)2025-05-09 01:52
답글
num=5에서 결과가 단건이 아닌 non-unqiue인 인덱스에서 select where num =5 for update 가
readcommitted은 새로운 5삽입 불가, repeatable read는 새로운 5 삽입 불가가 맞나요? - dc App
딘퐁(gunwoo7193)2025-05-09 01:55
답글
순수 레코드락은 삽입 허용 넥스크락에서 레코드락은 삽입 불가 인가 - dc App
딘퐁(gunwoo7193)2025-05-09 01:57
답글
@백갤러3(14.52)
공식 문서에 있는 output에도 고유키에 대한 내용이던데 중복 가능한 경우가 아니고..내일 실험해볼게요
백갤러 4(211.234)2025-05-09 01:59
답글
unique키일때는 명확하죠 외래키처럼 중복가능할때때매.. 늦은 시간 고생하셨습니다. - dc App
딘퐁(gunwoo7193)2025-05-09 02:01
답글
저도 내일 실험해봐야겠네요 - dc App
딘퐁(gunwoo7193)2025-05-09 02:01
답글
@딘퐁
공식문서내용이랑 다 종합해서 잼민이한테 물어봐도 중복 가능한 컬럼에 대해선 제 말이 맞다고 이야기 하는데 저분 말대로면 상식이 깨지는 거라 쉽사리 받아들이기 어려움
백갤러 4(211.234)2025-05-09 02:13
답글
@백갤러4(211.234)
아 제가 num 하나만 있길래 해당 컬럼을 PK로 가정했었는데, 아니라면 갭에 의한 충돌이 맞습니다.
PK일시 && 동일값 삽입시 -> duplicated 에러 터트리기 전에 레코드락과 충돌로 삽입 불가
PK아닐시 && read committed && PK는 다른값 삽입시 -> 레코드락은 걸리나 PK포함된레코드 기준으로 제한되고 갭락이 없어 삽입 성공
PK아닐시 && repeatable read && PK는 다른값 삽입시 -> 갭락 걸려서 충돌
백갤러 3(14.52)2025-05-09 02:22
답글
@백갤러3(14.52)
늦은 시간에 답변 감사합니다 여러 글 쓰신 거 보니 현직자신가요 되게 전문적이신거 같은데
백갤러 4(211.234)2025-05-09 02:24
답글
@백갤러4(211.234)
현직이긴 한데... 별거 없는 레거시한 곳에서 일하고 있어서 사실 여기 계신 다른분들이 기술적으로 훨씬 더 많이 알고 많이 경험하셨을것같아요 ㅋㅋㅋㅋ
교차검증해 ai studio rr
읽어봤는데 5가 Insert가 안되는게 맞지 않나?
5에 레코드 락이 갭에 대해 락이 걸리면 당연히 삽입이 안되어야지
저 문제대로 넥스트키락 걸리면 레코드락은 기존행만 잠그고 새로운 5는 삽입 가능 갭락은 저렇게 사이만 잠금 뭐가 문제지 - dc App
갭락이 (1,5)이면 경계선 1,5는 제외아니야? - dc App
일단 pk, uq는 이미 알거같으니 패스
무슨 말 하는지 이해했음 일반적인 인덱스가 문제인데 공부해올게 ㄱㄷ
밑에 분이 말해서 드디어 이해했다 갭락 범위가 숫자5가 아니라 기존에 5였던 레코드였네 - dc App
애초에 range scan 쿼리가 아닌데 Gap Lock이 걸리는거 부터 이상한데
repeatable read임 - dc App
인덱스 되어있음? num에
ㅇㅇ - dc App
mysql innoDB 기준이라 다른DBMS면 좀 다를거임 - dc App
여러분들 덕분에 이해완 - dc App
repeatable read는 넥스트 키 락이 기본 설정이잖아
레코드락+갭락이 넥스트 키 락아님? - dc App
음.. 맞음 근데 갭 락의 범위가 (1,5] 이렇게 되는 거 아님? (1, 5)임?
이해했음 1<----갭락--->기존5<--갭락--->10 이렇게 되서 새로운 5가 들어갈 자리가 막혀있는거네 - dc App
(1,5)(5,10)이면 경계선 제외하니 5는 되는거 아님? >> 5가 그 5가 아닌데 이거 어떻게 설명해야하지 숫자에 집중하지 말고 봐봐
결국 이게 핵심인데 설명좀 자세히 ㅠㅠ - dc App
새로운 값 5를 삽입하는 것은 값은 비록 5이지만 결국은 기존 5의 다음 또는 이전 위치로의 삽입으로 볼 수 있다 라고 설명할 수 있을 거 같은데
즉 (1,5)(5,10) 사이에 어떠한 삽입도 가능하지 않도록 보장 >> 새로운 5는 값만 5일 뿐 인덱스로 보면 결국은 이전 5의 앞 또는 뒤에 배치되는 것과 같기에
아 드디어 이해함 ㅋㅋㅋ갭락에서 5가 숫자 5가 아니라 기존 5인 레코드를 말하는거구나 감사합니다 - dc App
@딘퐁
그렇게 이해하시면 안됩니다. 갭락에서 충돌하는게 아니라 레코드 락에서 충돌하는거예요.
https://dev.mysql.com/doc/refman/8.4/en/innodb-locking.html#:~:text=lock%20mode%20IX-,Record%20Locks,-A%20record%20lock
MySQL
문서에 명시적인 스펙으로 제시되어있는 사항입니다.
@백갤러3(14.52) 자세한 설명 가능한가요 레코드 락에서 충돌한다는 부분이 무슨 말씀이신지 정확히 모르겠습니다
@백갤러3(14.52) 위 문서에서도 레코드 락은 해당 레코드에만 락을 거는 것이고, 새로운 삽입돠는 경우 (중복 허용) 시 아무 관련이 없다고 알고 있는데
@백갤러4(211.234) 넥스트키락이 아닌 LOCK_MODE X,REC_NOT_GAP 으로 5 레코드만 레코드 락이 잡히더라도 insert 5 가 실패한다는 이야기 입니다. A record lock is a lock on an index record. ~~ prevents any other transaction from inserting, updating, or deleting rows where the value of t.c1 is 10. 해당 내용에 정확하게 부합하는 상황이고, 직접 세션 두개로 상황 만들어서 performance_schema.data_locks 보시면 레코드락으로 인해서 insert가 방지되는것을 확인하실 수 있어요.
@백갤러3(14.52) 애초에 상황 자체가 where 5를 정확하게 걸었으면 결과가 단건임이 보장되는 상황이 될 수 있어서 next key lock 이 아니라 레코드락만 걸리는걸 보실 수도 있을거예요. gpt가 전반적으로 설명을 잘못한것같습니다.
@백갤러3(14.52) 아 디시를 많이 안해봐서 댓글 길이 제한에 말이 좀 두서 없는데 수정도 안되는군요 ㅋㅋㅋㅋ.... 양해해주시면 감사하겠습니다...
num=5에서 결과가 단건이 아닌 non-unqiue인 인덱스에서 select where num =5 for update 가 readcommitted은 새로운 5삽입 불가, repeatable read는 새로운 5 삽입 불가가 맞나요? - dc App
순수 레코드락은 삽입 허용 넥스크락에서 레코드락은 삽입 불가 인가 - dc App
@백갤러3(14.52) 공식 문서에 있는 output에도 고유키에 대한 내용이던데 중복 가능한 경우가 아니고..내일 실험해볼게요
unique키일때는 명확하죠 외래키처럼 중복가능할때때매.. 늦은 시간 고생하셨습니다. - dc App
저도 내일 실험해봐야겠네요 - dc App
@딘퐁 공식문서내용이랑 다 종합해서 잼민이한테 물어봐도 중복 가능한 컬럼에 대해선 제 말이 맞다고 이야기 하는데 저분 말대로면 상식이 깨지는 거라 쉽사리 받아들이기 어려움
@백갤러4(211.234) 아 제가 num 하나만 있길래 해당 컬럼을 PK로 가정했었는데, 아니라면 갭에 의한 충돌이 맞습니다. PK일시 && 동일값 삽입시 -> duplicated 에러 터트리기 전에 레코드락과 충돌로 삽입 불가 PK아닐시 && read committed && PK는 다른값 삽입시 -> 레코드락은 걸리나 PK포함된레코드 기준으로 제한되고 갭락이 없어 삽입 성공 PK아닐시 && repeatable read && PK는 다른값 삽입시 -> 갭락 걸려서 충돌
@백갤러3(14.52) 늦은 시간에 답변 감사합니다 여러 글 쓰신 거 보니 현직자신가요 되게 전문적이신거 같은데
@백갤러4(211.234) 현직이긴 한데... 별거 없는 레거시한 곳에서 일하고 있어서 사실 여기 계신 다른분들이 기술적으로 훨씬 더 많이 알고 많이 경험하셨을것같아요 ㅋㅋㅋㅋ
헷갈리는 부분인데 깔끔하네
다들 감사합니다. - dc App