NOLOCK
READUNCOMMITTED와 같습니다. 자세한 내용은이 항목 뒷부분의 READUNCOMMITTED를 참조하십시오.
1 | UPDATE 또는 DELETE 문 :이 기능은 유지 관리 모드에 있으며 이후 버전의 Microsoft SQL Server에서 제거 될 수 있습니다. |
READUNCOMMITTED
더티 읽기가 허용되도록 지정합니다.
다른 트랜잭션이 현재 트랜잭션에서 읽은 데이터를 수정하지 못하도록 공유 잠금이 발행되지 않으며 다른 트랜잭션이 설정 한 배타적 잠금은 현재 트랜잭션이 잠긴 데이터를 읽지 못하도록 차단하지 않습니다.
더티 읽기를 허용하면 더 높은 동시성이 발생할 수 있지만 데이터 수정을 읽는 대신 다른 트랜잭션이 롤백합니다.
이로 인해 트랜잭션에 오류가 발생하거나 커밋되지 않은 데이터가 사용자에게 표시되거나 사용자가 레코드를 두 번 (또는 전혀) 볼 수 없게 될 수 있습니다.
READUNCOMMITTED 및 NOLOCK 힌트는 데이터 잠금에만 적용됩니다.
READUNCOMMITTED 및 NOLOCK 힌트가있는 쿼리를 포함하여 모든 쿼리는 컴파일 및 실행 중에 Sch-S (스키마 안정성) 잠금을 획득합니다.
이 때문에 동시 트랜잭션이 테이블에서 Sch-M (스키마 수정) 잠금을 보유 할 때 쿼리가 차단됩니다.
예를 들어, 데이터 정의 언어 (DDL) 연산은 테이블의 스키마 정보를 수정하기 전에 Sch-M 잠금을 획득합니다.
READUNCOMMITTED 또는 NOLOCK 힌트로 실행되는 쿼리를 포함하여 동시 쿼리는 Sch-S 잠금을 획득하려고 시도 할 때 차단됩니다.
반대로, Sch-S 잠금을 보유한 쿼리는 Sch-M 잠금을 획득하려고 시도하는 동시 트랜잭션을 차단합니다.
INSERT, UPDATE 또는 DELETE 작업으로 수정 된 테이블에는 READUNCOMMITTED 및 NOLOCK을 지정할 수 없습니다.
SQL Server 쿼리 최적화 프로그램은 UPDATE 또는 DELETE 문의 대상 테이블에 적용되는 FROM 절의 READUNCOMMITTED 및 NOLOCK 힌트를 무시합니다.
1 | UPDATE 또는 DELETE 문의 대상 테이블에 적용되는 FROM 절의 READUNCOMMITTED 및 NOLOCK 힌트 사용에 대한 지원은 이후 버전의 SQL Server에서 제거됩니다. |
잠금 경합을 최소화하면서 다음 중 하나를 사용하여 커밋되지 않은 데이터 수정에 대한 더티 읽기로부터 트랜잭션을 보호 할 수 있습니다.
- READ_COMMITTED_SNAPSHOT 데이터베이스 옵션을 사용하여 READ COMMITTED 격리 수준을 ON으로 설정합니다.
- SNAPSHOT 격리 수준.
격리 수준에 대한 자세한 내용은 SET TRANSACTION ISOLATION LEVEL (Transact-SQL)을 참조하십시오 .
1 | READUNCOMMITTED가 지정된 경우 오류 메시지 601이 표시되면 교착 상태 오류 (1205)와 같이 해결하고 명령문을 다시 시도하십시오. |