[SQL] 설정 트랜잭션 격리 수준 READ UNCOMMITTED 대 (NOLOCK)
SQL설정 트랜잭션 격리 수준 READ UNCOMMITTED 대 (NOLOCK)
누군가가 나에게 내가 사용시기에 대한 몇 가지 지침을 제공 할 수 WITH (NOLOCK) SET 트랜잭션 격리 수준 READ UNCOMMITTED에 반대
각각의 장점 / 단점은 무엇입니까? 다른 반대 하나를 사용으로 사용자가 실행 한 모든 의도하지 않은 결과가 있습니까?
해결법
-
==============================
1.그들은 같은 일이다. 당신이 설정 트랜잭션 격리 수준 문을 사용하는 경우, 당신이 하나 또는 두 개의 테이블이 그 사용에 NOLOCK을 원하는 그렇다면, 연결의 모든 테이블에 적용됩니다; 그렇지 않으면 다른 사람을 사용합니다.
그들은 같은 일이다. 당신이 설정 트랜잭션 격리 수준 문을 사용하는 경우, 당신이 하나 또는 두 개의 테이블이 그 사용에 NOLOCK을 원하는 그렇다면, 연결의 모든 테이블에 적용됩니다; 그렇지 않으면 다른 사람을 사용합니다.
모두 더러운 읽기 줄 것이다. 당신이 괜찮 경우, 다음을 사용합니다. 당신이 읽고 더러운있을 수 없다면, 대신 스냅 샷 또는 직렬화 힌트를 고려하십시오.
-
==============================
2.WITH (NOLOCK)는 테이블 수준에서 힌트입니다. 와 READ_UNCOMMITTED에 대한 트랜잭션 격리 수준을 설정하면 연결에 영향을 미칩니다. 차이가 범위의 용어이다. 여기에 SQL Server 설명서에 READUNCOMMITTED와 NOLOCK을 참조하십시오 :
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
-
==============================
3.지침에 관해서는 ...에 StackOverflow에서 임의의 검색 및 전기 interweb ...
지침에 관해서는 ...에 StackOverflow에서 임의의 검색 및 전기 interweb ...
-
==============================
4.Strommy 말했듯이 내 지식의 유일한 차이점은 효과의 범위이다. 테이블 세션에 READ UNCOMMITTED에 NOLOCK 힌트.
Strommy 말했듯이 내 지식의 유일한 차이점은 효과의 범위이다. 테이블 세션에 READ UNCOMMITTED에 NOLOCK 힌트.
발생할 수있는 문제에 관해서는, 모든 일관성에 관하여이다. 당신은 당신이 더러운라는 다른 데이터가 잘못된 정보에 조작되고 영향을 미칠 수있는 읽 것을 얻을 수 있다는 것을 알고 관심을합니다.
나는 개인적으로 나는이에서 문제를 보았다 생각하지 않는다하지만 내가 NOLOCK을 사용하는 방법에 더 때문일 수 있습니다. 당신은 확인을 사용하는 것입니다 시나리오가 있다는 것을 알고 있어야합니다. 당신이 주로 테이블에 새로운 데이터를 추가되지만 시나리오는 데이터 시나리오를 확인하기 위해 뒤에 오는 다른 프로세스가 있습니다. 그건 아마 OK의 주요 흐름이 다시 가서 읽기 동안 행을 업데이트가 포함되어 있지 않기 때문에 될 것입니다.
또한 나는 요즘 당신이 다중 버전 동시성 제어를 조사해야한다고 생각합니다. 나는 그들이 2005 년에 그것을 추가 믿고 그것은 독자에게 사용할 데이터베이스의 스냅 샷을 제공하여 독자를 차단하는 작가를 중지하는 데 도움이됩니다. 나는 링크를 포함하고 독자에게 더 많은 연구를 떠날 것이다 :
MVCC
데이터베이스 격리 수준
-
==============================
5.당신은 당신이 사용 (NOLOCK)해야 할 것입니다 그래서 더러운 행을 포함 할 필요가있는 경우, (당신은 단지 사실이 하나의 스크립트를 가질 수)보기에서 설정 트랜잭션 격리 수준 읽기 커밋을 사용할 수 없습니다.
당신은 당신이 사용 (NOLOCK)해야 할 것입니다 그래서 더러운 행을 포함 할 필요가있는 경우, (당신은 단지 사실이 하나의 스크립트를 가질 수)보기에서 설정 트랜잭션 격리 수준 읽기 커밋을 사용할 수 없습니다.
-
==============================
6.각 테이블에 대해 WITH (NOLOCK)를 사용하는 것처럼 매주에 쓰기 또는 절을 가입하는 성가신 수 있습니다. 그러나 그것은이 "더러운"읽기라고 이유가 있습니다. 당신이 정말로 당신이 하나를 수행 할 때 알고, 안 그래서 세션 범위에 대한 기본값으로 설정합니다. 왜?
각 테이블에 대해 WITH (NOLOCK)를 사용하는 것처럼 매주에 쓰기 또는 절을 가입하는 성가신 수 있습니다. 그러나 그것은이 "더러운"읽기라고 이유가 있습니다. 당신이 정말로 당신이 하나를 수행 할 때 알고, 안 그래서 세션 범위에 대한 기본값으로 설정합니다. 왜?
잊어 WITH (NOLOCK) 하나는 특정 상황에서 차이를 만들 수 있습니다 원하지 않는 곳에 그러나 더러운 읽기하고, 매우 극적인 방법으로 프로그램에 영향을 미치지 않을 수 있습니다.
그래서 사용 WITH (NOLOCK) 현재 선택된 데이터가 나중에 롤백 할 수로, 올바르지 할 수있는 경우. 당신이 성능을 향상하고자 할 때 주로 사용되며, 응용 프로그램 컨텍스트에 대한 요구 사항이 일치하지 않는 데이터가 표시되고 있다는 위험을 감수 할 수 있습니다. 그러나 당신이나 담당 누군가가 WITH (NOLOCK)를 사용하는 의사 결정의 장단점을 무게를 가지고있다.
from https://stackoverflow.com/questions/3550337/with-nolock-vs-set-transaction-isolation-level-read-uncommitted by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 왜 외부 키는 더 많은 연습보다 이론적으로 사용됩니까? (0) | 2020.06.20 |
---|---|
[SQL] 당신은 무엇 SQL 코딩 표준을 따라야합니까? [닫은] (0) | 2020.06.20 |
[SQL] 스크립트는 MYSQL에서 UTF-8 단 정렬 모든 테이블과 필드를 변경합니다 (0) | 2020.06.20 |
[SQL] 저장 날짜 시간 (UTC) 대 기억하는 DateTimeOffset (0) | 2020.06.20 |
[SQL] 어떻게 SQL 명령문 작업 존재? (0) | 2020.06.20 |