Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Зависает запрос из SSIS пакета  [new]
Gargonde
Member

Откуда:
Сообщений: 2
Есть SSIS пакет, в котором выполняется множество различных действий. Среди этих действий есть Execute SQL Task, в котором выполняется несколько различных запросов (вставка, удаление во временные таблицы и в конце этого блока на основании них вставка в реальную таблицу конечных данных). Проблема в следующем, второй раз за сегодня зависает один из запросов, причем зависает, то есть он работает, по крайней мере sp_whoisactive и sp_blitzwho показывают, что он работает, блокировок нету.
Сам запрос выполняется на этой же машине за несколько секунд и возвращает около 30 строк (Данное зависание наблюдал два раза первый раз было 32 строки, второй 20 строк).
Зависание плавающее, то есть когда-то есть когда-то нет. Грешил на то, что место закончилось для Tempdb или лог файл, но нет.
Из последних изменения пакета, которые делал это поменял у всех блоков Isolation level c Serializable на ReadCommitted. До этого пакет стабильно работал.
Ищу варианты в какую сторону копать, так как у самого идеи закончились.

Запрос на который показывает Sp_whoisactive
+

insert #cnt_flm
(DwIDdayValue, cnt_flm)
select
 t.DwIDDayValue, count(distinct dd.extIdDevice) as cnt
from
 sa.sa_dayValuesTemp t
 inner join [sa].[sa_dayValuesPUOU] pu on pu.DwIDDayValue = t.DwIDDayValue
 inner join dbo.linkDeviceNodeAccount ldna on ldna.IntIDNodeAccount = pu.IntIDNodeAccount
 inner join dbo.device dd on dd.IntIDDevice = ldna.IntIDDevice
 inner join dbo.modelEq me on dd.IntIDModelEq = me.IntIDModelEq
where
 t.levelProcessingValidate = 1
 and not exists (select 1 from [sa].[sa_dayValuesErrorTemp] e where e.DwIDdayValue = t.DwIDdayValue and e.LevelError = 2 and e.TypeError = 1)
 and t.DateValues between ldna.fd and ldna.td
 and t.DateValues > ldna.dtStartLinkToNodeAccount
 and t.DateValues between dd.fd and dd.td
 and t.DateValues between me.fd and me.td
 and ldna.Activity = 1 
 and me.IntIDTypeEq = @IntIDFlowMeter
 and t.IntIDTypeEq = @IntIDTypeEqHeatCount
group by
 t.DwIDDayValue


Версия
Microsoft SQL Server 2014 - 12.0.4100.1 (X64)
Apr 20 2015 17:29:27
Copyright (c) Microsoft Corporation
Business Intelligence Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
25 апр 17, 19:49    [20433749]     Ответить | Цитировать Сообщить модератору
 Re: Зависает запрос из SSIS пакета  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Gargonde
sp_whoisactive и sp_blitzwho показывают, что он работает, блокировок нету.
если вы видите запрос значит ssis открыл подключение и передал контекст сиквел серверу.
блокировки это крайний случай, смотрите ожидания и план запроса (ту же sp_whoisactive можно запускать с разными параметрами) в момент "зависания".
25 апр 17, 21:11    [20433913]     Ответить | Цитировать Сообщить модератору
 Re: Зависает запрос из SSIS пакета  [new]
Gargonde
Member

Откуда:
Сообщений: 2
Дедушка,
спасибо, нашел проблему - parameter sniffing.
26 апр 17, 00:40    [20434309]     Ответить | Цитировать Сообщить модератору
 Re: Зависает запрос из SSIS пакета  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
Gargonde,
А можно немного подробнее?
Суть проблемы. Дошли руки перенести базу с 2005 на 2016 сервер. Базу прицепил методом детач/аттач и поменял уровень совместимости на 2016. SSIS пакетов где-то 2 сотни. Без передеплоя не работал ни один. Взял свой солюшен, поставил Deploymend model для солюшена в MSDT2015 в SQL Server 2016 и передплоил. Часть пакетов запустилась без проблем. Но с частью большая проблема.
Суть этих пакетов - вычитать данные из таблицы (несколько млн строк), пройти несколько шагов валидации и PIVOT-ом вычленить метрики в другие таблицы.
Так вот если в пакете есть несколько последовательных lookup Component (валидация, Error (если есть) и Merge), то пакет "зависает" где-то на 4-м таком компоненте. Такое впечатление, что не хватает коннекшенов. Хотя для всех компонентов стоит Full cache и реально профайлером данные выбираются один раз.
Вижу такую картинку: из базы вычитано 41280 строк, после первой валидации 27520, после второй 8756, после третьей 3395, после четвертой 0. И так "висим" несколько часов, пока не вылазит общий таймаут.
Для базы пробовал поставить sniifing в Off и Sniffing for secondary в Off - ничего не меняется.
Дайте хоть зацепочку, куда копать?
22 май 17, 11:52    [20500870]     Ответить | Цитировать Сообщить модератору
 Re: Зависает запрос из SSIS пакета  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
Вот так это вживую:

К сообщению приложен файл. Размер - 102Kb
22 май 17, 11:58    [20500887]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить