2013-07-18 3 views
1

У нас есть процесс, который видит некоторые согласованные деблокировки параллелизма внутри запроса, включающие следующий AD-HOC. Я нашел пару работы обходных доступную:Блокировки параллелизма SQL-запросов 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 заявления. Следующий шаг, чтобы добавить подсказку MAXDOP запроса к AD-HOC, но я немного запутался, где я могу добавить, что в заявлении обновления:

  1. ли это в конце Update заявления
  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) 

Другие предложения: Вам нужен многосторонний подход для устранения (или уменьшения) тупики Intra-запросов. Прежде чем переходить к подсказкам, я бы предложил оптимизировать вашу стратегию индекса.

Я предлагаю вам создать более подходящий индекс для поддержки этого запроса, чем индекс IX_ProdGroupItems_ProductGroupID_ExtHierarchyID_ExtNodeID_1, на который он в настоящее время опирается.

*wink* *wink* 

Надеется, что это помогает,

_UB