SQLP

시험 직전 요약장

판단 기준과 헷갈리는 개념, 대표 예제를 짧게 확인하세요.

이론 목록

SELECT FOR UPDATE 실전: OF·NOWAIT·WAIT·SKIP LOCKED

원래 이론 →

판단 기준

혼동하기 쉬운 판단정확한 기준
OF o.status는 status Column만 잠근다ORDERS의 선택 Row를 잠글 Table로 식별한다
NOWAIT는 Transaction 전체를 자동 Rollback한다현재 문장이 즉시 실패하며 Transaction 종료는 Application이 결정한다
WAIT n은 모든 종류의 Lock에 대한 전체 SQL Timeout이다Row Lock 대기 정책이며 Exclusive Table Lock과 상위 Timeout은 별도 고려한다
SKIP LOCKED는 모든 잠금을 건너뛴다이미 잠긴 대상 Row를 건너뛰는 Queue 지향 정책이다
Fetch Size를 줄이면 잠긴 Row 수도 줄어든다FOR UPDATE Cursor는 OPEN 시 결과 Row를 잠근다
OF를 생략해도 변경할 Table만 자동으로 잠긴다Join에 참여한 모든 Table의 선택 Row가 Lock 대상이 될 수 있다
FETCH FIRST와 FOR UPDATE를 바로 조합할 수 있다row_limiting_clause와 for_update_clause는 함께 사용할 수 없다

이 부분의 원문 →

헷갈리는 개념

SELECT FOR UPDATE로 획득한 Row Lock은 Cursor를 닫거나 Application에서 결과를 모두 읽었다고 해제되지 않습니다. Lock은 해당 Transaction의 COMMIT 또는 ROLLBACK까지 유지됩니다.

구분일반 SELECTSELECT FOR UPDATE
읽기 방식일관 읽기선택 Row를 확인하고 Lock 획득
Row Lock 선점하지 않음수행함
다른 일반 SELECT차단하지 않음일반 일관 읽기는 대체로 계속 가능
다른 DML·FOR UPDATERow Lock으로 막지 않음동일 Row 변경·Lock 요청이 대기 또는 실패
해제 시점해당 없음Transaction 종료

따라서 사용자 입력, 승인 대기, 장시간 계산, 외부 API 호출을 Row Lock 보유 구간에 넣지 않는 것이 기본입니다.


이 부분의 원문 →

대표 계산·예제

예를 들어 FOR UPDATE OF o.status를 사용해도 조건이 넓어 주문 10만 건이 선택되면 ORDERS의 많은 Row가 잠길 수 있습니다. PK·Unique Key·Tenant Key·상태 조건 등으로 대상 Row를 먼저 좁혀야 합니다.

이 부분의 원문 →

내 최근 연습 오답

현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.

학습 기록 →

오답 기록을 확인하고 있습니다.