Я довольно новичок в SSIS, и у меня возникает проблема с длительным временем предварительного выполнения (я видел, как он зависал при предварительном выполнении в течение 8 часов, пока я не отменил его) при выполнении пакетов, использующих SQL транзакции (BEGIN / COMMIT / ROLLBACK TRAN) при выполнении SQL задач в VS 2017 (SSDT) и SQL агент сервера.
Я пытаюсь извлечь не более 300 000-300 строк из таблицы в нашем DWH и просто записать ее в промежуточную таблицу на другом сервере, который ежедневно усекается и загружается с данными fre sh. У меня есть 5 пакетов в моем решении, которое делает это, используя одни и те же соединения проекта. Поскольку MSDT C не настроен в наших системах, я решил использовать подход, подробно описанный в этом посте, чтобы я мог использовать транзакции без него: https://www.mssqltips.com/sqlservertip/3072/sql-server-integration-services-ssis-transactions-without-msdtc/
Поток данных очень прост для каждого пакета и включает в себя только перенос данных из исходной таблицы в таблицу назначения с некоторыми преобразованиями между ними.
Я не мог понять, почему мои пакеты зависают или занимает много времени для запуска фазы предварительного выполнения. Есть случаи, когда я запускаю его в SSDT, и он работает безупречно в течение нескольких секунд, в тот момент, когда я запускаю его снова, ничего не меняя, он застревает. Я сомневаюсь, что сами запросы являются проблемой, поскольку они могут выполняться всего за несколько секунд в SSMS. Я уже пробовал следующее:
- Установить DelayValidation в True
- Установить ValidateExternalMetaData в False
- Установить AutoAdjustBufferSize в True (поскольку я заметил, что некоторые неудачные замены буфера в журналах)
- Правильно установлен TargetServerVersion в конфигурациях проекта
Единственный временный Исправление, которое я обнаружил до сих пор, - это избавление от задач Execute SQL для транзакций, что привело меня к мысли, что это как-то связано с ними. Почему это происходит, когда я использую транзакции? Любая помощь будет принята с благодарностью.