[SQL] SELECT 문에서 NOLOCK 힌트의 효과
SQLSELECT 문에서 NOLOCK 힌트의 효과
나는 진짜 문제는 추측 :
더러운 SELECT 문에 (NOLOCK) 힌트로 추가됩니다 읽기에 대해 난 상관하지 않는 경우의 성능에 영향을 미칠 수 :
예:
Select *
from aTable with (NOLOCK)
해결법
-
==============================
1.1) 예, NOLOCK과 선택은 빠르게 정상을 선택보다는 완료됩니다.
1) 예, NOLOCK과 선택은 빠르게 정상을 선택보다는 완료됩니다.
2) 예, NOLOCK과 선택이 영향받는 테이블에 대한 다른 쿼리는 일반 선택보다 빠르게 완료 할 수 있습니다.
왜 이런 일이 있을까?
NOLOCK 일반적으로 (당신의 DB 엔진에 따라 다름) 수단은 저에게 당신의 데이터를 제공하고, 나는에 어떤 상태 상관 없어, 당신은 그것에서 읽는 동안 여전히 유지 귀찮게하지 않습니다. 그것은 더 적은 리소스를 많이, 매우 매우 위험 한 번 더 빨리 모든입니다.
당신은에서 업데이트를하지 않는다 또는 아무것도의 중요한 시스템, 또는 경우 절대 정확성은 NOLOCK 읽기에서 유래 데이터를 사용하여 필요를 수행 결코에 경고한다. 또한이 데이터는 쿼리의 실행 중에 삭제 된 또는이 확정 될 아직 다른 세션에서 삭제 된 행을 포함 절대적으로 가능하다. 또한이 데이터는 부분적으로 갱신 된 행을 포함 할 수있다. 또한이 데이터는 외래 키 제약 조건을 위반하는 레코드가 포함되어있을 수 있습니다. 아직 테이블에 추가했지만이 된이 데이터 제외 행이 최선을 다하고 될 가능성이있다.
당신은 정말 데이터의 상태가 무엇인지 알 수있는 방법이 없습니다.
당신이 오류의 일부 마진이 허용되는 행 개수 또는 다른 요약 데이터 같은 것들을 얻으려고 노력하는 경우, 다음 NOLOCK 부스트 이러한 쿼리에 대한 성능 및 피하고 부정적인 영향 데이터베이스 성능을 가지고에 좋은 방법입니다.
항상 큰주의와 NOLOCK 힌트를 사용하고 의심 반환하는 모든 데이터를 처리합니다.
-
==============================
2.NOLOCK 때문에 공유 잠금의 부족, 대부분의 SELECT 문을 빠르게한다. 또한, 작가가 당신의 선택에 의해 방해되지 않도록 잠금 수단의 발행으로 부족하다.
NOLOCK 때문에 공유 잠금의 부족, 대부분의 SELECT 문을 빠르게한다. 또한, 작가가 당신의 선택에 의해 방해되지 않도록 잠금 수단의 발행으로 부족하다.
NOLOCK는 READ UNCOMMITTED의 분리 레벨 기능적으로 동일하다. 가장 큰 차이점은 당신이 선택하는 경우, 일부 테이블이 아닌 다른 사람에 NOLOCK을 사용할 수 있다는 것입니다. 당신은 당신이 모든 테이블에 힌트를 적용 할 필요가 없기 때문에 SET 트랜잭션 격리 수준 READ UNCOMMITTED는, 쉽게 사용, 복잡한 쿼리에있는 모든 테이블에 NOLOCK을 사용하려는 경우.
여기에 귀하의 처분에 격리 수준 모두에 대한 정보뿐만 아니라 테이블 힌트입니다.
SET 트랜잭션 격리 수준
테이블 힌트 (Transact-SQL)를 참조하십시오
-
==============================
3.상기 말하는 것과 또한 NOLOCK 실제로 당신이 당신의 선택 이전에 커밋 된 행을 못하고의 위험을 부과하는 것이 매우 알고 있어야합니다.
상기 말하는 것과 또한 NOLOCK 실제로 당신이 당신의 선택 이전에 커밋 된 행을 못하고의 위험을 부과하는 것이 매우 알고 있어야합니다.
http://blogs.msdn.com/sqlcat/archive/2007/02/01/previously-committed-rows-might-be-missed-if-nolock-hint-is-used.aspx 참조
-
==============================
4.이 자물쇠를 기다릴 필요가 없기 때문에 더 빠른 것
이 자물쇠를 기다릴 필요가 없기 때문에 더 빠른 것
-
==============================
5.단지 사용에주의 해 WITH (NOLOCK) 클러스터 된 인덱스가 테이블에서의 SELECT 문.
단지 사용에주의 해 WITH (NOLOCK) 클러스터 된 인덱스가 테이블에서의 SELECT 문.
WITH (NOLOCK)는 종종 거래를 읽을 데이터베이스를 가속화 할 수있는 마법의 방법으로 이용된다.
결과 세트는 종종 나중에 롤백 아직 커밋되지 않은 행을 포함 할 수 있습니다.
WITH (NOLOCK)는 행 데이터를 결과 테이블에 스트리밍되는 바와 같이 다음 행 인덱스가 다른 트랜잭션에 의해 변경 될 수있는 비 - 클러스터 인덱스가 테이블에 적용되는 경우. 이 수단은, 결과 세트는 누락 된 행 수 또는 동일 행 여러 번을 표시 할 수있다.
READ COMMITTED 데이터가 여러 사용자가 동시에 동일한 셀을 변경 한 칼럼 내의 손상된 추가적인 문제점을 추가한다.
from https://stackoverflow.com/questions/210171/effect-of-nolock-hint-in-select-statements by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 관계형 데이터베이스에서 키 값 쌍 (0) | 2020.03.25 |
---|---|
[SQL] MySQL의 오류 때 DATE 또는 DATETIME에 대한 기본 값을 설정 (0) | 2020.03.25 |
[SQL] SQL : WHERE 절 내에서 IF 절 (0) | 2020.03.25 |
[SQL] 여러 테이블에서 COUNT (*)를 선택 (0) | 2020.03.25 |
[SQL] ROW_NUMBER 대 SQL RANK () () (0) | 2020.03.25 |