동시에 실행될 때 교착 상태를 일으키는 2 개의 쿼리가 있습니다.
쿼리 1-인덱스 (index1)에 포함 된 열을 업데이트합니다.
update table1 set column1 = value1 where id = @Id
table1에서 X-Lock을 가져온 다음 index1에서 X-Lock을 시도합니다.
쿼리 2 :
select columnx, columny, etc from table1 where {some condition}
index1에서 S-Lock을 수행 한 다음 table1에서 S-Lock을 시도합니다.
동일한 쿼리를 유지하면서 교착 상태를 방지하는 방법이 있습니까? 예를 들어 업데이트 전에 업데이트 트랜잭션의 인덱스에서 X-Lock을 수행하여 테이블과 인덱스 액세스가 동일한 순서로 유지되도록 할 수 있습니다. 교착 상태를 방지해야합니까?
격리 수준은 읽기 커밋입니다. 인덱스에 행 및 페이지 잠금이 사용됩니다. 동일한 레코드가 두 쿼리에 모두 참여할 수 있습니다. 교착 상태 그래프에서 매개 변수를 표시하지 않으므로 알 수 없습니다.