문제

"세트 트랜잭션 격리 레벨 읽기가 커밋되지 않은"과 Nolock 사용의 차이점은 무엇입니까? 하나는 다른 것보다 낫습니까?

도움이 되었습니까?

해결책

그것들은 똑같은 것입니다. Nolock은 테이블별로 배치됩니다 SET Transaction... 블록으로 배치 할 수 있습니다.

다른 팁

Nolock은 쿼리 힌트이며, 따라서 지정된 쿼리 내의 Specifc 테이블에만 적용됩니다.

트랜잭션 격리 수준 설정은 현재 연결 내에서 또는 명시 적으로 수정 될 때까지 실행 된 모든 코드에 적용됩니다.

명확히하기 위해, 기능적으로 직장에서의 분리 수준은 동일하지만 다루는 범위는 그렇지 않을 수 있습니다.

보다 그 대답 몇 시간 전부터 질문에 이르기까지 SQL Server를 선택하여 차단을 유발합니다.

인용 레무스 루 사누:

CAN 블록 업데이트를 선택합니다. 적절하게 설계된 데이터 모델과 쿼리는 최소한의 차단 만 유발하며 문제가되지 않습니다. Nolock 힌트가있는 '평소'는 거의 항상 잘못된 대답입니다. 적절한 대답은 쿼리를 조정하여 거대한 테이블을 스캔하지 않도록하는 것입니다.

쿼리가 적합하지 않은 경우 먼저 스냅 샷 격리 레벨을 고려해야합니다. 둘째는 데이터베이스 스냅 샷 사용을 고려해야하며 마지막 옵션은 더러운 읽기 여야합니다 (그리고 Nolock 힌트를 사용하지 않고 격리 수준을 변경하는 것이 좋습니다). 이름에서 명확하게 말하면 Dirty Read는 일관성이없는 데이터를 반환합니다 (예 : 총 시트는 불균형 일 수 있음).

다른 답변도 도움이 될 수 있습니다.

그것들은 동일한 효과를 가지고 있으며, 하나만 잠금 힌트 (nolock)로 사용되고 다른 하나만 연결 범위에 사용됩니다.

그 중 하나에주의하십시오 - 더러운 읽기는 앱에 따라 매우 나쁜 일이 될 수 있습니다. 페이지 이동으로 인해 동일한 레코드를 두 번 읽거나 레코드를 놓치면 사용자에게 매우 혼란 스러울 수 있습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top