2011-03-30 4 views
1

불투명 한 SQL Server 2008 교착 상태가 발생했습니다.Sql Sever 2008 동일한 인덱스에서 교착 상태 선택 및 삭제

Spid 233 is running this query: 
    SELECT TOP(500) FROM T1.X INNER JOIN T2 ON T1.X = T2.X WHERE T2.ID>-1 AND T2.ID<=10000 
Spid 234 is running this query: 
    DELETE FROM T2 WHERE (X=1) OR (X=7) OR (X=1233) OR X(=7878) OR (X=33) OR (X=776) OR (X=112) 
Spid 233 is waiting for a Shared KEY lock on index t2.PK_T2. (Spid 234 holds a conflicting X lock.) 
Spid 234 is waiting for an eXclusive KEY lock on index t2.PK_T2. (Spid 233 holds a conflicting S lock.) 

PK_X가 (자동 증가 열인 ID) 식별 컬럼 클러스터형 상승 지수이다

T1: ID – bigint (PK), JOBID – bigint, X- bigint 
T2: ID – bigint (PK), JOBID – bigint, X- bigint 

SQL 서버 에러 로그는 다음 설명

나는 두 테이블을 가지고 . T2에는 JOBID 및 X에서 클러스터되지 않은 인덱스 인 또 다른 인덱스가 있습니다.

두 프로세스가 같은 오브젝트 (T2.PK_T2)에 대한 잠금 소유자 인 이유는 무엇입니까?

도와주세요, 도론은

답변

0

어떻게 두 프로세스는 동일한 개체 (T2.PK_T2)에 대한 잠금의 소유자입니다 와서?

잠금이 전체 색인에 없습니다. 그것들은 key 자물쇠이고 색인 내의 다른 키 (행)에있게됩니다.

2

예에서 233은 처음 500 개의 행을 가져 오려고합니다.

234가 같은 범위의 레코드를 삭제하려고합니다.

(234)은 삭제 행에 배타적 잠금이 필요하므로이

233 200 200 행 판독하려고 예 행 잠그면 그 잠금을 완료 234 기다릴 일시 정지 및 이동 다른 300 행에.

234는 더 많은 행을 삭제하려고 시도하고 233은 행을 선택하여 차단합니다.

이 시점에서 233은 234를 차단하고 234도 233을 차단하므로 교착 상태입니다.

이것은 행 수준의 잠금 문제입니다.