우당탕탕
MySQL 8.4에서 SKIP LOCKED 옵션의 조건과 제한 사항 본문
MySQL 8.4에서는 SELECT ... FOR UPDATE 또는 SELECT ... FOR SHARE 구문에 SKIP LOCKED 옵션을 사용할 수 있습니다. 이 옵션은 잠긴 행을 건너뛰고 즉시 결과를 반환하여, 잠금 대기 없이 쿼리를 실행할 수 있게 합니다.
SKIP LOCKED 옵션의 조건
- 잠긴 행을 건너뛰고 결과 집합에서 제외합니다.
- 잠금 대기 없이 즉시 쿼리가 실행됩니다.
- 행 수준 잠금(row-level locks)에만 적용됩니다.
- 트랜잭션이 활성화되어 있어야 하며, 자동 커밋이 비활성화된 상태여야 합니다 (예:
START TRANSACTION사용).
SKIP LOCKED 옵션의 제한 사항
- 잠긴 행을 건너뛰기 때문에 결과 집합이 데이터의 일관된 뷰를 제공하지 않을 수 있습니다. 따라서 일반적인 트랜잭션 작업에는 적합하지 않습니다.
- 복제 환경에서, 특히 스테이트먼트 기반 복제(statement-based replication)에서는 안전하지 않습니다.
- 외부 쿼리에서만 잠금이 적용되며, 중첩된 서브쿼리에서는 별도의 잠금 구문이 필요합니다.
요약
SKIP LOCKED 옵션은 잠긴 행을 즉시 건너뛰어 대기 없이 쿼리를 실행할 수 있도록 하지만, 데이터 일관성 문제와 복제 환경에서의 제한 때문에 주로 큐 처리와 같이 잠금 경합을 피하는 특수한 상황에서 사용됩니다.
참고 자료
'Database' 카테고리의 다른 글
| MySQL EXPLAIN 실행 계획에서 possible_keys와 key 컬럼의 차이점 및 쿼리 성능 최적화 활용법 (0) | 2026.10.19 |
|---|---|
| MySQL EXPLAIN 실행 계획 주요 컬럼 의미와 성능 최적화 고려사항 (0) | 2026.10.18 |
| MySQL EXPLAIN 실행 계획에서 확인할 주요 항목 (0) | 2026.10.17 |
| MySQL 8.4에서 SKIP LOCKED 사용 시 조건과 한계 (0) | 2026.10.16 |
| Redis 캐싱 Spring Boot 연동 직접 구현해보니 경험한 모든 과정 (0) | 2026.10.15 |
Comments