SQL Server 2012, Amazon RDSБесконечная запрос в SQL Server 2012
Это мой простой запрос
update [dbo].[DeliveryPlan]
set [Amount] = dp.Amount +
case when @useAmountColumn = 1 and dbo.ConvertToInt(bs.Amount) > 0
then dbo.ConvertToInt(bs.Amount)
else @amount
end
from
BaseSpecification bs
join
BaseSpecificationStatusType t on (StatusTypeID = t.StatusTypeID)
join
[DeliveryPlan] dp on (dp.BaseSpecificationID = bs.BaseSpecificationID and dp.ItemID = @itemID)
where
bs.BaseID = 130 and t.IsActive = 1
Это не может быть завершена. Если условие bs.BaseID = 130 (обновление 7000 строк) изменяется для bs.BaseID = 3 (обновление 1000000 строк), оно длится 13 секунд.
Статистические данные являются актуальными, я думаю
В мониторе производительности я вижу использование процессора 5%
Когда я использую зр наблюдать активные соединения и для этого запроса tempdb_allocations 32, tembdb_current - 32, просмотров - 32 000 000, cpu - 860 000 (запрос длится 20 минут)
В чем проблема?
UPDATE: Я добавил некластеризованный индекс для [DeliveryPlan]
- по BaseSpecificationID + ItemID
и проблема исчезла. К сожалению, я вижу эту проблему каждый день с разными запросами. И проблема исчезает непредсказуемо.
Вы пытались переместить 'dp.ItemID = @ itemID' в предложение WHERE? Я на 90% уверен, что это не поможет, но меня очень интересует результат. – OzrenTkalcecKrznaric
результат тот же –
как насчет индексов на соединенных столбцах? и отфильтрованных столбцов? любой намек из плана запроса? Что такое rowcount таблицы 'BaseSpecificationStatusType'? – Paolo