이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 11079|회답: 1

[출처] MSSQL (NOLOCK) 더티 리딩

[링크 복사]
2020-4-3 10:06:04에 게시됨 | | |
단점:

1. 더러운 읽기 결과가 나올 것입니다

2. 특정 쿼리 문장에만 적용

장점:

1. 일부 파일은 WITH (NOLOCK)을 이용한 SQL 쿼리 효율이 33% 증가할 수 있다고 명시합니다.

2. 내부 조인 명에 사용할 수 있습니다

더티 리드: 사용자가 자원을 수정하고, 다른 사용자가 수정된 레코드를 읽고, 첫 번째 사용자가 수정을 포기하면 데이터가 이전 수정으로 돌아갑니다. 이 두 가지 다른 결과는 더티 리드입니다.

상세 정보:

일반적으로 SQL 쿼리 성능을 향상시키기 위해서는 인덱스를 생성하는 것이 첫 번째 고려사항입니다. 실제로 인덱스 설정 외에도, SQL 명령어를 입력할 때 문법에 WITH(NOLOCK) 섹션을 추가하면 온라인 쿼리가 많은 환경에서 데이터셋이 LOCK되는 현상을 개선하여 쿼리 성능을 향상시킬 수 있습니다.

하지만 한 가지 주의할 점은 SQL SELECT와 (NOLOCK)가 더티 리드를 유발할 수 있다는 것입니다.

예를 들어:

간단한 SELECT 외에도 JOIN 문법과 함께 SELECT 문법을 사용할 수 있습니다. 하지만 DELETE, INSERT, UPDATE, 그리고 트랜잭션이 필요한 다른 명령어들은 좋지 않습니다...


일부 파일에서는 WITH(NOLOCK)로 SQL 쿼리 효율이 33% 증가할 수 있다고 합니다.
WITH (NOLOCK)를 추가하면 SQL Server에 SELECT 명령어가 현재 테이블의 트랜잭션 락 상태를 고려할 필요가 없다는 것을 알게 되어, 성능이 크게 향상되고 데이터베이스 시스템의 락 현상(데드 락 포함)도 크게 줄어듭니다.

한 가지 주목할 점은 WITH (NOLOCK)가 현재 테이블의 트랜잭션 락을 고려하지 않기 때문에, 여러 단계에 있는 데이터(예: 여러 테이블 간 트랜잭션>예: 출금 시스템)가 있을 때 WITH(NOLOCK)는 현재 트랜잭션 프로세스를 처리하는 데이터를 무시한다는 것입니다...

솔직히 말해, NoLock을 사용할 때는 트랜잭션이 아직 완료되지 않은 수정된 데이터를 읽을 수 있습니다. 따라서 거래 데이터의 실시간 무결성을 고려해야 한다면 WITH(NOLOCK) 사용을 신중히 고려해야 합니다.

트랜잭션을 고려할 필요가 없다면, WITH (NOLOCK)가 유용한 참고 자료가 될 수 있습니다.

참고 1: WITH (< table_hint >)
쿼리 옵티마이저가 사용하는 하나 이상의 인덱스 테이블 스캔을 지정합니다.
또는 쿼리 옵티마이저가 이 데이터 테이블을 활용해 이 문장에 락 모드를 사용할 수도 있습니다.

참고 2: WITH (NOLOCK)는 READ UNCOMMITTED와 동등합니다





이전의:데이터베이스의 마스터-슬레이브 지연 시간은 부정확한 쿼리 해상도를 초래합니다
다음:fiddler가 로컬 localhost, 127.0.0.1 네트워크 요청을 크롤링할 수 없는 문제를 해결했습니다
2020-4-5 14:21:36에 게시됨 |
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com