' SELECT ... FOR UPDATE LIMIT 1 SKIP LOCKED '
이라는 구문을 사용하고 있습니다.
n개의 row가 있을 때에 1번째의 row만 가져오고. 만약 1번째의 row가 locked 된 상태라면 2번째의 row을 가져오게 할려고 위와 같은 쿼리를 사용하는데. 무엇이 문제인지 병목현상이 일어납니다.
궁금한 것은 다음과 같습니다.
1. Limit 1 은 SKIP Locked 의 영향을 받지 않고 Locked 된 항상 1번째 Row만 가져올려고 하는지.
2. SELECT ... FOR UPDATE LIMIT 1 의 LOCK 범위가 LIMIT의 대상이 되는 Row 전체가 되는지.
3. 위 둘다 해당 되는지.
아무리 찾아봐도 나오지 않아서 이렇게 질문을 올려봅니다.
만약 아시는 분이 계신다면, 답변 해 주신다면 감사하겠습니다.