이 인스턴스는 SharePoint 2007 데이터베이스 (SP)를 호스팅합니다. SP 컨텐츠 데이터베이스 내에서 많이 사용되는 하나의 테이블에 대해 수많은 SELECT / INSERT 교착 상태가 발생했습니다. 관련 리소스를 좁혔습니다. 두 프로세스 모두 비 클러스터형 인덱스에 대한 잠금이 필요합니다.
INSERT에는 SELECT 리소스에 대한 IX 잠금이 필요하고 SELECT에는 INSERT 리소스에 대한 S 잠금이 필요합니다. 교착 상태 그래프는 1) SELECT (생산자 / 소비자 병렬 스레드)에서 2 개, 그리고 2) INSERT에서 3 개의 자원을 보여줍니다.
검토를 위해 교착 상태 그래프를 첨부했습니다. 이것은 Microsoft 코드 및 테이블 구조이므로 변경할 수 없습니다.
그러나 MSFT SP 사이트에서 MAXDOP 인스턴스 수준 구성 옵션을 1로 설정하는 것이 좋습니다.이 인스턴스는 다른 많은 데이터베이스 / 응용 프로그램간에 공유되므로이 설정을 비활성화 할 수 없습니다.
따라서 이러한 SELECT 문이 병렬 처리되지 않도록 시도하기로 결정했습니다. 이것이 해결책이 아니라 문제 해결에 도움이되는 임시 수정 사항이라는 것을 알고 있습니다. 따라서 교착 상태가 사라지더라도 (워크로드가 자주 선택 / 삽입) 워크로드가 변경되지 않더라도“병렬 처리 비용 임계 값”을 표준 25에서 40으로 늘 렸습니다. 내 질문은 왜?
SPID 356 INSERT에는 비 클러스터형 인덱스에 속하는 페이지에 IX 잠금이 있습니다.
SPID 690 SELECT 실행 ID 0은 동일한 비 클러스터형 인덱스에 속하는 페이지에 S 잠금이 있습니다.
지금
SPID 356은 SPID 690 리소스에 대한 IX 잠금을 원하지만 SPID 356이 SPID 690 실행 ID 0에 의해 차단되고 있기 때문에이를 유지할 수 없습니다. SP 잠금
690 실행 ID 1은 SPID 356 리소스에 대한 S 잠금을 원하지만 SPID 690 실행 ID로 인해이를 얻을 수 없습니다. 1은 SPID 356에 의해 차단되었으며 이제 교착 상태가 발생했습니다.
전체 교착 상태 세부 사항은 여기에서 찾을 수 있습니다
누군가 내가 왜 그것을 정말로 감사하게 이해하는지 도울 수 있다면.
EventReceivers 테이블.
ID
고유 식별자 번호 16
이름 nvarchar 아니요 512
SiteId 고유 식별자 번호 16
WebId 고유 식별자 번호 16
HostId 고유 식별자 번호 16
HostType int 번호 4
항목
아이디 int 번호 4
DirName nvarchar 번호 512
LeafName nvarchar 번호 256
유형 int 번호 4
시퀀스 번호 int 번호 4
어셈블리 nvarchar 아니오 512
클래스 nvarchar 아니오 512
데이터 nvarchar 아니오 512
필터 nvarchar 아니오 512
SourceId tContentTypeId 아니오 512
SourceType int 아니오 4
자격 증명 int 아니오 4
ContextType varbinary 아니오 16
ContextEventType varbinary no 16
ContextId varbinary no 16
ContextObjectId varbinary no 16
ContextCollectionId varbinary no 16
index_name index_description index_keys
PRIMARY SiteId에 위치한 EventReceivers_ByContextCollectionId가 클러스터되지 않음, ContextCollectionId
EventReceivers_ByContextObjectId가 PRIMARY SiteId에있는 클러스터되지 않음, ContextObjectId
EventReceivers_ById가 클러스터되지 않음, PRIMARY SiteId에 있음, Id
EventReceivers_ByTarget 클러스터에있는 유형 : ContextId, ContextType, ContextEventType, SequenceNumber, Assembly, Class
EventReceivers_IdPRIMARY ID에있는 클러스터되지 않은 고유 한 고유 키
proc_InsertEventReceiver
하고proc_InsertContextEventReceiver
우리가 XDL에서 볼 수 있습니까? 또한 병렬 처리를 줄이려면 서버 전체 설정을 사용하지 않고 이러한 명령문에 직접 영향을 미치는 이유 (MAXDOP 1 사용)는 어떻습니까?