항상 나쁘지 는 않습니다 .
물론 커밋되지 않은 값 (롤백되어 논리적으로 존재하지 않을 수 있음)을 읽을 수있을뿐만 아니라 값을 여러 번 읽거나 전혀 읽을 수없는 현상을 허용합니다.
이러한 예외가 발생하지 않도록 보장하는 유일한 격리 수준은 직렬화 가능 / 스냅 샷입니다. 스캔이이 행에 도달하기 전에 행이 이동되면 (키 업데이트로 인해) 반복 가능한 읽기 값이 누락 될 수 있으며, 키 업데이트로 인해 이전에 읽은 행이 앞으로 이동하면 읽기 커밋 된 값이 두 번 읽힐 수 있습니다.
nolock
그러나 이러한 격리 수준에서는 기본적 으로 읽을 페이지가 64 개 이상인 것으로 추정 될 때 할당 순서 스캔을 사용하기 때문에 이러한 문제가 발생할 가능성이 높습니다 . 색인 키 업데이트로 인해 페이지간에 행이 이동할 때 발생하는 문제 범주뿐만 아니라 이러한 할당 순서 스캔은 페이지 분할 문제 (취소 된 페이지보다 새로 할당 된 페이지가 파일보다 빠르면 행이 누락 될 수 있음)에 취약합니다. 이미 스캔 한 페이지가 파일의 나중 페이지로 분할 된 경우 이미 스캔했거나 두 번 읽음).
간단한 (단일 테이블)에 대한 최소한이 검사의 사용을 억제하고 키에서 검사 명령 얻을 수 있습니다 쿼리 nolock
단순히를 추가하여 ORDER BY index_key
있도록 쿼리 Ordered
의 속성 IndexScan
입니다 true
.
그러나보고 응용 프로그램에 정확한 수치가 필요하지 않고 이러한 불일치 가능성이 더 클 경우 허용 될 수 있습니다.
그러나 확실히 당신은 마술 "터보"버튼이라는 희망으로 모든 쿼리에서 그것을 쳐서는 안됩니다. 해당 격리 수준에서 이상 결과가 발생할 가능성이 높거나 결과가 전혀 없습니다 ( "데이터 이동으로 인해 NOLOCK으로 스캔을 계속할 수 없음"오류). 성능 nolock
이 훨씬 나빠질 수있는 경우도 있습니다 .