2013-07-18 5 views
1

다음 AD-HOC와 관련된 일관된 쿼리 내 병렬 처리 데드락을 확인하는 프로세스가 있습니다. SQL Server 내부 쿼리 병렬 교착 상태

UPDATE VPG 
SET VPG.CountActual = COALESCE(PGI.CNT, 0) 
FROM ValidProductGroups AS VPG 
LEFT JOIN 
    (SELECT ProductGroupID, COUNT(ProductGroupID) AS 'CNT' 
    FROM ProdGroupItems WITH(NOLOCK) 
    WHERE Deleted = 0 
    GROUP BY ProductGroupID) AS PGI ON PGI.ProductGroupID = VPG.ProductGroupID 
WHERE VPG.LocationID = 5 

내가 Update 문에서 하위 쿼리에 클러스터되지 않은 인덱스를 추가 : 나는 가능한 작업 방법의 몇 가지를 발견했다. 다음 단계는 AD-HOC에 MAXDOP 쿼리 힌트를 추가하려면,하지만 난 업데이트 문에 그것을 추가 할 수있는에 조금 혼란 스러워요 다음 Update 문의 끝에

  1. 이인가
  2. 또는 서브 쿼리에 SELECT 성명의 끝에?

제발 도와주세요!

답변

0

쿼리 힌트는 하위 쿼리 또는 CTE에서 사용할 수 없습니다. UPDATE 문의 끝에 쿼리 ​​힌트를 사용하려고합니다.

UPDATE VPG 
SET VPG.CountActual = COALESCE(PGI.CNT, 0) 
FROM ValidProductGroups AS VPG 
LEFT JOIN 
    (SELECT ProductGroupID, COUNT(ProductGroupID) AS 'CNT' 
    FROM ProdGroupItems WITH(NOLOCK) 
    WHERE Deleted = 0 
    GROUP BY ProductGroupID) AS PGI ON PGI.ProductGroupID = VPG.ProductGroupID 
WHERE VPG.LocationID = 5 
OPTION (MAXDOP 1) 

더 제안 : 당신은 조회 내 교착 상태를 제거 (또는 감소)하기 위해 다각적 인 접근이 필요합니다. 쿼리 힌트에 들어가기 전에 인덱스 전략을 최적화하는 것이 좋습니다.

이 쿼리를 지원하는 데 더 적합한 인덱스를 만드는 것이 좋습니다 (현재 IX_ProdGroupItems_ProductGroupID_ExtHierarchyID_ExtNodeID_1 인덱스보다). 이 도움이

*wink* *wink* 

희망,

_UB