1

次の AD-HOC を含む、いくつかの一貫したクエリ内並列処理のデスロックを確認するプロセスがあります。いくつかの回避策が利用可能であることがわかりました。

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. Update発言の最後か
  2. またはSELECTサブクエリのステートメントの最後に?

助けてください!

4

1 に答える 1

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

于 2013-09-18T23:56:20.940 に答える