2009-06-19 5 views
17

"TRANSACTION ISOLATION LEVEL READ UNCOMMITTED"와 NOLOCK의 차이점은 무엇입니까? 하나가 다른 것보다 낫습니까?NOLOCK 대 트랜잭션 격리 수준

+2

MSSQL 2012에서 'NOLOCK' 힌트는 사용되지 않으며 해당 READUNCOMMITTED 힌트로 대체됩니다 . [출처] (http://msdn.microsoft.com/en-us/library/ms187373.aspx) – Jeroen

+0

제안 된 소스에서 다음과 같이 말합니다. - UPDATE 또는 DELETE 문의 대상 테이블에 적용되는 FROM 절의 READUNCOMMITTED 및 NOLOCK 힌트 사용에 대한 지원은 SQL Server의 차기 버전에서 제거됩니다. '. 'NOLOCK'은 더 이상 사용되지 않는다고 말하지는 않습니다. 현재'NOLOCK'과'READUNCOMMITTED' 힌트를 모두 사용할 수 있습니다. – RBT

답변

20

그들은 똑같습니다. 범위가 다르기 때문입니다. NOLOCK은 테이블 단위로 배치되고 SET Transaction...은 블록으로 배치 될 수 있습니다.

+0

확인해 주셔서 감사합니다. – Jason

+0

그것은 실행중인 SQL의 모든 테이블에 nolock을 두는 것과 같습니다. –

6

NOLOCK은 쿼리 힌트이므로 지정된 쿼리 내의 특정 테이블에만 적용됩니다.

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

명확히하기 위해 기능적으로 직장에서의 격리 수준은 동일하지만 적용 범위는 다를 수 있습니다.

4

몇 시간 전부터 SQL Server SELECT statements causing blocking까지 that answer을 참조하십시오. Remus Rusanu을 인용

:

SELECT 업데이트를 차단할 수 있습니다. 적절하게 설계된 데이터 모델 및 쿼리는 차단을 최소화하고 문제가되지 않습니다. '보통'NOLOCK WITH 힌트는 거의 항상 잘못된 대답입니다. 정답은 쿼리를 조정하여 거대한 테이블을 검사하지 않는 것입니다.

쿼리가 가변적이지 않은 경우 먼저 SNAPSHOT ISOLATION 수준을 고려해야하며 두 번째로 데이터베이스 스냅 숏 사용을 고려해야하며 마지막 옵션은 DIRTY READS 여야하며 NOLOCK 힌트를 사용하는 대신 격리 수준을 변경하는 것이 좋습니다. 더티 읽기는 이름에서 알 수 있듯이 일치하지 않는 데이터를 반환합니다 (예 : 전체 시트의 불균형).

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

+0

제 의견이지만 여기 제공된 참고서는 게시 된 질문에 대답하지 않습니다. –

+0

NOLOCK과 다른 격리 방법을 비교 한 이후로 그렇습니다.하지만 도움이 될 것이라고 생각했습니다. –

1

잠금 힌트 (nolock)로만 사용되며 다른 하나는 연결 범위로 사용됩니다.

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

관련 문제