Programing

(NOLOCK) 대 SET TRANSACTION ISOLATION LEVEL READ 미 확약

crosscheck 2020. 7. 24. 07:35
반응형

(NOLOCK) 대 SET TRANSACTION ISOLATION LEVEL READ 미 확약


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

각각의 장단점은 무엇입니까? 의도하지 않은 결과가 발생했을 때 다른 하나와 반대되는 결과가 있습니까?


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

둘 다 더럽게 읽을 수 있습니다. 괜찮다면 사용하십시오. 더티 리드를 읽을 수없는 경우 대신 힌트 snapshotserializable힌트 를 고려하십시오 .


WITH (NOLOCK)은 테이블 수준에 대한 힌트입니다. 트랜잭션 격리 수준을 READ_UNCOMMITTED로 설정하면 연결에 영향을줍니다. 차이점은 범위에 있습니다. 다음 SQL Server 설명서에서 READUNCOMMITTED 및 NOLOCK을 참조하십시오.

http://technet.microsoft.com/en-us/library/ms187373.aspx

트랜잭션 격리 수준 : http://technet.microsoft.com/en-us/library/ms173763.aspx


  • NOLOCK은 테이블 (또는 뷰 등)에 대해 로컬입니다.
  • 커밋되지 않은 읽기는 세션 / 연결 당입니다

지침에 관해서는 StackOverflow와 전기 웹에서 무작위로 검색하십시오 ...


내 지식으로는 유일한 차이점은 Strommy가 말한 효과의 범위입니다. 테이블에 대한 NOLOCK 힌트와 세션에서 COMM UNCOMMITTED

발생할 수있는 문제는 일관성에 관한 것입니다. 주의를 기울인다면 더티 리드 (dirty reads)라고 불리는 정보를 얻을 수 있으며 이는 잘못된 정보로 조작되는 다른 데이터에 영향을 줄 수 있습니다.

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

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

MVCC

데이터베이스 격리 수준


뷰에서 커밋되지 않은 트랜잭션 격리 수준 읽기 읽기를 사용할 수 없으므로 (실제로 하나의 스크립트 만 가질 수 있음), 더티 행이 포함되어야하는 경우 (nolock)을 사용해야합니다.


각 테이블에 WITH (NOLOCK)을 사용해야하므로 모든 FROM 또는 JOIN 절에 작성하는 것이 성 가실 수 있습니다. 그러나 "더러운"읽기라고하는 이유가 있습니다. 따라서 실제로 할 때 알아야하며 세션 범위의 기본값으로 설정하지 마십시오. 왜?

WITH (NOLOCK)을 잊어 버리면 프로그램에 큰 영향을 미치지 않지만 원하지 않는 곳에서 더티 읽기를 수행하면 특정 상황에서 차이를 만들 수 있습니다.

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

참고 URL : https://stackoverflow.com/questions/3550337/with-nolock-vs-set-transaction-isolation-level-read-uncommitted

반응형