WITH (NOLOCK) vs SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


118

누군가 내가 언제 사용 해야하는지에 대한 지침을 줄 수 있습니까? WITH (NOLOCK) 반대를SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

각각의 장단점은 무엇입니까? 다른 하나와 반대로 하나를 사용하여 의도하지 않은 결과가 있습니까?

답변:


105

그들은 같은 것입니다. 이 set transaction isolation level명령문 을 사용하면 연결의 모든 테이블에 적용되므로 nolock하나 또는 두 개의 테이블 에서만 사용하려는 경우이를 사용하십시오. 그렇지 않으면 다른 것을 사용하십시오.

둘 다 더러운 읽기를 제공합니다. 괜찮다면 사용하십시오. 더티 읽기를 할 수 없다면 대신 snapshot또는 serializable힌트 를 고려하십시오 .


팬텀 데이터에 관심 REPEATABLE READSERIALIZABLE없는지 대신 고려하십시오 . SERIALIZABLE매우 제한적이며 거의 사용해서는 안됩니다 (예를 들어 일부 중요한 금융 애플리케이션에서 제외).
Kryptos 2015 년


10
  • NOLOCK은 테이블 (또는 뷰 등)에 로컬입니다.
  • READ UNCOMMITTED는 세션 / 연결 당입니다.

지침에 관해서는 ... StackOverflow 및 전기 인터 웹에서 무작위 검색 ...


마지막 링크 "NOLOCK을 사용하는 것이 나쁜 이유 .."는 더 이상 존재하지 않습니다.
sangam 2015 년

1
전기 인터넷은 귀중합니다. 제 하루에 햇살을 더 해주셔서 감사합니다.
JJS

9

내가 아는 유일한 차이점은 스트로 미가 말한 것처럼 효과의 범위입니다. 테이블에 대한 NOLOCK 힌트 및 세션에 대한 READ UNCOMMITTED.

발생할 수있는 문제는 일관성에 관한 것입니다. 관심이 있다면 잘못된 정보에 대해 조작되는 다른 데이터에 영향을 미칠 수있는 더티 읽기 (dirty reads)를 얻을 수 있다는 것을 알고 있어야합니다.

나는 개인적으로 이것으로부터 어떤 문제도 보지 못했다고 생각하지만 그것은 내가 nolock을 사용하는 방법 때문일 수 있습니다. 사용할 수있는 시나리오가 있음을 알고 있어야합니다. 주로 테이블에 새 데이터를 추가하지만 데이터 시나리오를 확인하기 위해 뒤에 오는 또 다른 프로세스가있는 시나리오입니다. 주요 흐름에는 읽기 중에 행으로 돌아가서 업데이트하는 것이 포함되지 않으므로 괜찮을 것입니다.

또한 요즘에는 다중 버전 동시성 제어를 살펴 봐야한다고 생각합니다. 나는 그들이 2005 년에 그것을 추가했다고 믿는다. 그것은 독자들에게 사용할 데이터베이스의 스냅 샷을 제공함으로써 작성자가 독자를 차단하는 것을 막는 데 도움이된다고 생각한다. 링크를 포함하고 독자에게 추가 연구를 남길 것입니다.

MVCC

데이터베이스 격리 수준


+1 READ_UNCOMMITTED의 "should you"측면에 대해서는 설명하지 않았지만 Sean은이를 잘 다루고 있습니다. SQL Server에서 동일한 행을 두 번 읽을 수있는 경우도 있습니다 (페이지 분할로 인해).
Anon246

6

View에서 Set Transaction Isolation Level Read Uncommitted를 사용할 수 없으므로 (실제로는 스크립트가 하나만있을 수 있음) 더티 행을 포함해야하는 경우 (nolock)을 사용해야합니다.


4

각 테이블에 WITH (NOLOCK)를 사용해야하므로 모든 FROM 또는 JOIN 절에 작성하는 것이 성 가실 수 있습니다. 그러나 그것은 "더티"읽기라고 불리는 이유가 있습니다. 따라서 세션 범위에 대한 기본값으로 설정하지 말고 언제 수행하는지 알아야합니다. 왜?

WITH (NOLOCK)를 잊어 버리는 것은 프로그램에 매우 극적인 영향을주지 않을 수 있지만 그렇지 않은 경우 더티 읽기를 수행합니다. 원하지 특정 상황에서 차이를 만들 수 있습니다.

따라서 나중에 롤백 될 수 있으므로 선택한 현재 데이터가 올바르지 않은 경우 WITH (NOLOCK)를 사용하십시오. 이는 주로 성능을 높이고 싶을 때 사용되며 애플리케이션 컨텍스트의 요구 사항으로 인해 일관성없는 데이터가 표시 될 위험을 감수 할 수 있습니다. 그러나 귀하 또는 담당자는 WITH (NOLOCK) 사용 결정의 장단점을 고려해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.