Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Gargonde Member Откуда: Сообщений: 2 |
Есть SSIS пакет, в котором выполняется множество различных действий. Среди этих действий есть Execute SQL Task, в котором выполняется несколько различных запросов (вставка, удаление во временные таблицы и в конце этого блока на основании них вставка в реальную таблицу конечных данных). Проблема в следующем, второй раз за сегодня зависает один из запросов, причем зависает, то есть он работает, по крайней мере sp_whoisactive и sp_blitzwho показывают, что он работает, блокировок нету. Сам запрос выполняется на этой же машине за несколько секунд и возвращает около 30 строк (Данное зависание наблюдал два раза первый раз было 32 строки, второй 20 строк). Зависание плавающее, то есть когда-то есть когда-то нет. Грешил на то, что место закончилось для Tempdb или лог файл, но нет. Из последних изменения пакета, которые делал это поменял у всех блоков Isolation level c Serializable на ReadCommitted. До этого пакет стабильно работал. Ищу варианты в какую сторону копать, так как у самого идеи закончились. Запрос на который показывает Sp_whoisactive
Версия 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] Ответить | Цитировать Сообщить модератору |
Дедушка Member Откуда: Город трёх революций Сообщений: 5114 |
блокировки это крайний случай, смотрите ожидания и план запроса (ту же sp_whoisactive можно запускать с разными параметрами) в момент "зависания". |
||
25 апр 17, 21:11 [20433913] Ответить | Цитировать Сообщить модератору |
Gargonde Member Откуда: Сообщений: 2 |
Дедушка, спасибо, нашел проблему - parameter sniffing. |
26 апр 17, 00:40 [20434309] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
igor2222 Member Откуда: Харків Сообщений: 1233 |
Вот так это вживую: К сообщению приложен файл. Размер - 102Kb |
22 май 17, 11:58 [20500887] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |