601: Could not continue scan with NOLOCK due to data movement (데이터 이동으로 NOLOCK 스캔을 계속할 수 없음)
SQL Server의미
NOLOCK(READ UNCOMMITTED) 스캔 중 동시 데이터 이동(페이지 분할/이동)으로 인해 스캔을 계속할 수 없었다. 락 없는 읽기가 일관되지 않은 상태에 도달했다.
원인
NOLOCK 힌트 또는 READ UNCOMMITTED 격리 수준으로 읽는 동안 동시 업데이트/삭제/페이지 분할로 스캔 대상 페이지가 재배치됨.
해결 방법
쿼리를 다시 실행한다(대개 일시적이다). 가능하면 NOLOCK 힌트를 피하고, 차단 없이 일관된 읽기를 위해 READ COMMITTED SNAPSHOT(RCSI) 격리를 사용한다. 쓰기가 많은 테이블에서는 더티 리드보다 스냅샷 격리를 우선한다.
같은 데이터베이스의 다른 항목
- 8623The query processor ran out of internal resources and could not produce a query plan (쿼리 프로세서 내부 리소스 부족으로 쿼리 계획 생성 불가)
- 4104The multi-part identifier could not be bound (다중 부분 식별자를 바인딩할 수 없음)
- 2714There is already an object named in the database (데이터베이스에 같은 이름의 개체가 이미 있음)
- 50000Custom error raised with RAISERROR (RAISERROR로 발생시킨 사용자 정의 오류)
- 3902The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION (대응하는 BEGIN TRANSACTION이 없는 COMMIT TRANSACTION)
- 1101Could not allocate a new page because of insufficient disk space in filegroup (파일 그룹의 디스크 공간 부족으로 새 페이지를 할당할 수 없음)
- 3729Cannot DROP because it is being referenced by object (객체가 참조 중이어서 DROP 불가)