나는 마이크로 소프트의 사이트 데이터베이스가 복구되는 경우를 제외하고, 데이터를 읽을 때 SQL Server가 잠금을 요청하지 않는 http://msdn.microsoft.com/en-us/library/ms173763.aspx공유 READ_COMMITTED_SNAPSHOT 잠금 및 스냅 숏 격리
에 읽었습니다.
READ_COMMITTED_SNAPSHOT/SNAPSHOT ISOLATION을 사용하는 Sql Server가 공유 잠금을 전혀 사용하지 않는다는 의미입니까? 어떻게 가능합니까?
예를 들어, 2 개의 트랜잭션이있는 경우. 첫 번째 트랜잭션 T1이 일부 행을 업데이트하려고합니다. 두 번째 트랜잭션 T2가 동일한 행 읽기를 시작합니다 (이 트랜잭션은 그를 일부 출력 버퍼, 응답 버퍼 또는 SQL Server에서 호출 된 모든 트랜잭션으로 복사합니다). 동시에 트랜잭션 T1이 해당 행을 업데이트하기 시작합니다 (버전이 지정된 행이 먼저 생성됨).
트랜잭션 T2가 커밋되지 않은 데이터를 읽을 가능성은 없습니까? T1이 업데이트하기 전에 트랜잭션 T2가 해당 행을 복사하기 시작 했으므로 해당 행에 단독 잠금이 없음을 기억하십시오.
이 상황도 가능하며 데이터를 복사하는 동안 해당 행에 공유 잠금을 설정하지 않으면 어떻게됩니까?
그래서 어떤 트랜잭션이 데이터를 읽을 때마다 데이터를 읽는 동안 래치 완료 페이지를 획득하고 완료 직후 래치를 해제합니까? – Marka
[Aries 논문의 1.4 장] (http://www.cs.berkeley.edu/~brewer/cs262/Aries.pdf)을 확인하십시오. –