특정 교착 상태 시나리오를 증명하고 진행 상황에 대한 통찰력을 요구하는 테스트 사례를 설정하고 있습니다. 나는 conapiently HeapTable이라고하는 힙 테이블을 가지고있다. 이 테이블은 simulateously 2 트랜잭션에 의해 업데이 트됩니다.UPDATE 힙 테이블 - RID 교착 상태
거래 1 :
BEGIN TRAN
UPDATE HeapTable
SET FirstName = 'Dylan'
WHERE FirstName = 'Ovidiu';
WAITFOR DELAY '00:00:15';
UPDATE HeapTable
SET FirstName = 'Bob'
WHERE FirstName = 'Thierry';
ROLLBACK TRANSACTION
거래 2 :
BEGIN TRAN
UPDATE HeapTable
SET FirstName = 'Pierre'
WHERE FirstName = 'Michael';
ROLLBACK TRAN
나는 첫 번째 트랜잭션 1, 예상 거래 한 일부 단독 잠금을 주장 할 것이다 가깝게 거래 2. 다음에 해고 , 독점적 인 의도와 함께. 나는 이것이 하나의 지적 생각하기 때문에,
spid dbid ObjId IndId Type Resource Mode Status
55 5 711673583 0 RID 1:24336:10 X GRANT
57 5 711673583 0 RID 1:24336:10 U WAIT
내가 두 번째 트랜잭션이 같은 RID의 업데이트 잠금을 요청 볼 가지 놀랐습니다 : 트랜잭션 2는 RID에 와서 같은의 업데이트 잠금을 요청합니다 & 두 업데이트 문은 서로 다른 데이터를 처리합니다. 어떻게 든 페이지 수준에서 충돌을 기대하고있었습니다. 두 번째 트랜잭션이 업데이트가 필요한 이유
는 거래의 두 번째 업데이트 트랜잭션이 1 차기 트랜잭션의 트랜잭션이 & 완료 롤백의 결과로 교착 상태로 볼 수 언제 1.
는누군가 나를 설명 할 수 다른 레코드를 업데이트해도 동일한 RID에서 잠글 수 있습니까?
에 대한 정보를 심층적으로 다룬 내용은이 DBA의 질문은 DBA.SE에 있어야 하는가? – ajeh
@ajeh는 항상 둘 사이의 선이 다소 흐릿하다는 것을 발견했습니다. 더 많은 목적이있을 것이라고 생각되면 거기에 게시하겠습니다. – Jens
여기가 완벽합니다. 걱정 마. – Will