우당탕탕

MySQL 8.4에서 SKIP LOCKED 옵션의 조건과 제한 사항 본문

Database

MySQL 8.4에서 SKIP LOCKED 옵션의 조건과 제한 사항

모찌모찝 2026. 10. 18. 15:25

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 옵션은 잠긴 행을 즉시 건너뛰어 대기 없이 쿼리를 실행할 수 있도록 하지만, 데이터 일관성 문제와 복제 환경에서의 제한 때문에 주로 큐 처리와 같이 잠금 경합을 피하는 특수한 상황에서 사용됩니다.

참고 자료

Comments