인프런 커뮤니티 질문&답변

kekim님의 프로필 이미지

작성한 질문수

Real MySQL 시즌 1 - Part 2

Ep.17 SELECT ... FOR UPDATE [ NOWAIT | SKIP LOCKED ]

SKIP LOCKED 부분에서 INNER JOIN이 아니고 LEFT JOIN이 걸릴수 있다면

해결된 질문

24.07.17 00:19 작성

·

70

0

예제에서는 WHERE 절 때문에 LEFT JOIN이 INNER JOIN으로 최적화되는 것으로 알고 있지만 만약에 LEFT JOIN으로 걸릴 수 있는 쿼리라면 SKIP LOCKED 의 잠금 경합의 결과가 달라질 수도 있나요?

답변 1

0

백은빈님의 프로필 이미지
백은빈
지식공유자

2024. 07. 18. 22:31

안녕하세요.

궁금하신 부분이 강의에 나와있는 예제는 INNER JOIN이 사용된 쿼리이지만, LEFT JOIN을 사용하는 쿼리에서는 SKIP LOCKED가 어떻게 동작하는건지 그 부분이 궁금하신거 맞을까요?

kekim님의 프로필 이미지
kekim
질문자

2024. 07. 19. 22:38

넵 맞습니다!

백은빈님의 프로필 이미지
백은빈
지식공유자

2024. 08. 12. 22:22

안녕하세요.

이 부분은 사실 JOIN 유형에 따라 잠금 경합의 결과가 달라진다기보다는 쿼리가 어떻게 처리되고, 어떤 쿼리들이 함께 사용되느냐에 따라 달라진다고 볼 수 있을 것 같아요.

그래서 사용하실 예정인 쿼리로 직접 테스트해보면서 잠금 경합을 확인하시는 것이 좋아보입니다.

잠금 경합을 최소화할 수 있도록 쿼리에 맞는 적절한 인덱스를 생성한 상태에서, 발생할 수 있는 쿼리 사용 시나리오를 작성해보시고 잠금 경합 유무를 한번 확인해보시면 될 것 같아요.

MySQL 서버에 performance_schema 기능이 활성화돼있는 경우 performance_schema.data_locks 테이블을 조회하면 쿼리에서 어떤 데이터에 대해 어떤 잠금을 수행하고 있는지도 확인하실 수 있습니다. 테스트하시면서 이 부분도 같이 살펴보시면 좋을 것 같아 말씀드려봅니다.

-- // performance_schema 활성화 여부 확인
mysql> show global variables like 'performance_schema';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| performance_schema | ON    |
+--------------------+-------+

혹시 추가로 더 궁금한 부분 있으시면 편하게 말씀해주세요.

감사합니다.

 

kekim님의 프로필 이미지

작성한 질문수

질문하기