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

Откуда:
Сообщений: 12
Добрый день, уважаемые форумчане.
Пытаюсь распараллелить пакет, но получаю следующие ошибки
[DWH ContactInformation [14]] Error: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.  The AcquireConnection method call to the connection manager "1cdev.DWH" failed with error code 0xC0202009.  There may be error messages posted before this with more information on why the AcquireConnection method call failed.
[DWH LoanContracts [80]] Error: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80040E14.
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 11.0"  Hresult: 0x80040E14  Description: "Нефиксируемая транзакция обнаружена в конце пакета. Был выполнен откат транзакции.".
[DWH LoanContracts [80]] Error: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 11.0"  Hresult: 0x80004005  Description: "Распределенная транзакция завершена. Прикрепите этот сеанс к новой транзакции или транзакции NULL.".
[DWH LoanContracts [80]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The "DWH LoanContracts.Inputs[OLE DB Destination Input]" failed because error code 0xC020907B occurred, and the error row disposition on "DWH LoanContracts.Inputs[OLE DB Destination Input]" specifies failure on error. An error occurred on the specified object of the specified component.  There may be error messages posted before this with more information about the failure.
[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PROCESSINPUTFAILED.  The ProcessInput method on component "DWH LoanContracts" (80) failed with error code 0xC0209029 while processing input "OLE DB Destination Input" (93). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running.  There may be error messages posted before this with more information about the failure.
[Execute SQL Task] Error: Executing the query "UPDATE [dbo].[SalesContracts]
SET Active = 0
FROM ..." failed with the following error: "Координатор распределенных транзакций (Microsoft) (MS DTC) отменил распределенную транзакцию.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
Error: The SSIS Runtime has failed to enlist the OLE DB connection in a distributed transaction with error 0x8004D00A "Принять участие в этой транзакции не удалось.".


Пытался нарыть информацию на форумах, но ничего не помогло.
MSDTC включена. Если переделать на последовательно выполнение, то все выполняется без ошибок.

К сообщению приложен файл. Размер - 58Kb
5 окт 18, 08:54    [21695974]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31331
Alexey Zarodov
MSDTC включена.
А вам нужно всё выполнять в одной распределённой транзакции?
Если нет, то, может, установить TransactionOption в NotSupported?
5 окт 18, 09:53    [21696031]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Alexey Zarodov
Member

Откуда:
Сообщений: 12
alexeyvg,

да, нужно, т.к. если в любом из блоков появляется ошибка, требуется откатить все предыдущие шаги.
5 окт 18, 10:00    [21696039]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
tarrus
Member

Откуда: Bergen
Сообщений: 831
Alexey Zarodov
alexeyvg,

да, нужно, т.к. если в любом из блоков появляется ошибка, требуется откатить все предыдущие шаги.


Пишите в промежуточные таблицы и последним шагом делайте switch/merge.
Обычно это проще и надежнее, чем распределенные транзакции настраивать и поддерживать.
5 окт 18, 10:38    [21696077]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 552
Alexey Zarodov
alexeyvg,

да, нужно, т.к. если в любом из блоков появляется ошибка, требуется откатить все предыдущие шаги.

Похоже, что оба сбойных блока - "Shift LeasingContracts" и "Shift LoanContracts" - используют или ссылаются на одну таблицу.
Если не переделывать все на использование merge, попробуйте компромиссный вариант - установить "Shift LeasingContracts" и "Shift LoanContracts" последовательно, а дальнейшие шаги - параллельно как в текущем варианте.
5 окт 18, 10:47    [21696088]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Alexey Zarodov
Member

Откуда:
Сообщений: 12
tarrus,

а в чем профит? Это итак загрузка из staging area в целевую базу.

Проблема в том, что в промежуточной базе могут содержаться ошибки, которые заранее неизвестны.
Параллельность предполагал использовать для ускорения загрузки данных, т.к. некоторые таблицы не зависят друг от друга, но вот первые таблицы должны быть загружены последовательно для генерации суррогатных ключей.

Ну хорошо, перегружу я их в промежуточные (опять же, последовательно одну за другой, несмотря на то, что многие друг от друга не зависят, но зависят от первых сущностей). Дальше что? Последовательно перегружать в целевую базу? Но с таким успехом я могу не использовать еще один промежуточный, а просто последовательно грузить из Staging Area в целевую.
5 окт 18, 10:50    [21696091]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
tarrus
Member

Откуда: Bergen
Сообщений: 831
Alexey Zarodov
tarrus,

а в чем профит? Это итак загрузка из staging area в целевую базу.

Проблема в том, что в промежуточной базе могут содержаться ошибки, которые заранее неизвестны.
Параллельность предполагал использовать для ускорения загрузки данных, т.к. некоторые таблицы не зависят друг от друга, но вот первые таблицы должны быть загружены последовательно для генерации суррогатных ключей.

Ну хорошо, перегружу я их в промежуточные (опять же, последовательно одну за другой, несмотря на то, что многие друг от друга не зависят, но зависят от первых сущностей). Дальше что? Последовательно перегружать в целевую базу? Но с таким успехом я могу не использовать еще один промежуточный, а просто последовательно грузить из Staging Area в целевую.


Ну самый главный профит, что данные доступны и консистентны даже во время загрузки.

Измерения все равно будут грузиться раньше фактов, как ты не крути. Как может помочь транзакция я не понимаю, если честно.

А грузить всё в транзакции это большой риск. Грузить несколько часов, чтобы потом откатить все из-за последней записи в посдедней таблице. Ну не знаю...

Довольно распространенная практика вместо физических таблиц фактов иметь вьюхи с джойнами по бизнес-ключам. Но тут нужно смотреть на сценарии использования этих фактов.
5 окт 18, 11:01    [21696096]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Alexey Zarodov
Member

Откуда:
Сообщений: 12
tarrus,

как я писал, транзакция нужно только потому, что при любой ошибке в любом из блоков нужно откатить все, что было залито до ошибки. Только по этой причине используется транзакция. Если есть альтернативные варианты, то подскажите, пожалуйста.
5 окт 18, 11:05    [21696101]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
tarrus
Member

Откуда: Bergen
Сообщений: 831
Alexey Zarodov
tarrus,

Ну хорошо, перегружу я их в промежуточные (опять же, последовательно одну за другой, несмотря на то, что многие друг от друга не зависят, но зависят от первых сущностей). Дальше что? Последовательно перегружать в целевую базу? Но с таким успехом я могу не использовать еще один промежуточный, а просто последовательно грузить из Staging Area в целевую.


Последний шаг с switch/merge обычно в десятки или сотни раз короче. Если это только свитчи, то вообще несколько милисекунд. Поэтому мгновенно или почти мгновенно получается новая версия данных. Очень удобно на мой взгляд.
5 окт 18, 11:06    [21696102]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
tarrus
Member

Откуда: Bergen
Сообщений: 831
Alexey Zarodov
tarrus,

как я писал, транзакция нужно только потому, что при любой ошибке в любом из блоков нужно откатить все, что было залито до ошибки. Только по этой причине используется транзакция. Если есть альтернативные варианты, то подскажите, пожалуйста.


Так смысл транзакции в полном откате, а не до ошибки. Как транзакция определит, что вот эта часть хорошая, а вот эта плохая? Тем более при параллельной загрузку понятие "до ошибки" тоже не ясно.
5 окт 18, 11:08    [21696105]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
tarrus
Member

Откуда: Bergen
Сообщений: 831
tarrus
Alexey Zarodov
tarrus,

как я писал, транзакция нужно только потому, что при любой ошибке в любом из блоков нужно откатить все, что было залито до ошибки. Только по этой причине используется транзакция. Если есть альтернативные варианты, то подскажите, пожалуйста.


Так смысл транзакции в полном откате, а не до ошибки. Как транзакция определит, что вот эта часть хорошая, а вот эта плохая? Тем более при параллельной загрузку понятие "до ошибки" тоже не ясно.


Сорри, не верно прочитал ваше сообщение.

Промежуточные таблицы имитируют транзакцию, но оставляют вам шанс на "дозагрузку"
5 окт 18, 11:10    [21696108]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Alexey Zarodov
Member

Откуда:
Сообщений: 12
tarrus,

в общем и целом, я понял смысл, но у меня остается один вопрос. Как быть с суррогатными ключами, которые генерятся автоматически (identity). Если я воспользуюсь промежуточными таблицами, залью в них, то как перенести данные в целевую с сохранением суррогатных ключей? Иначе мне снова придется привязывать таблицы измерений, чтобы получить вновь созданные ключи.
5 окт 18, 11:17    [21696117]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
tarrus
Member

Откуда: Bergen
Сообщений: 831
Alexey Zarodov
tarrus,

в общем и целом, я понял смысл, но у меня остается один вопрос. Как быть с суррогатными ключами, которые генерятся автоматически (identity). Если я воспользуюсь промежуточными таблицами, залью в них, то как перенести данные в целевую с сохранением суррогатных ключей? Иначе мне снова придется привязывать таблицы измерений, чтобы получить вновь созданные ключи.


Не добавляйте свойство identity в целевых таблицах. Просто и всё при мердже. Если будете переключать партиции, то там вообще это не важно.
5 окт 18, 11:25    [21696125]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Alexey Zarodov
Member

Откуда:
Сообщений: 12
tarrus,

но таким образом придется генерить его уже своими силами, правильно я понимаю?
5 окт 18, 11:28    [21696128]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
tarrus
Member

Откуда: Bergen
Сообщений: 831
Alexey Zarodov
tarrus,

но таким образом придется генерить его уже своими силами, правильно я понимаю?


А полностью все таблицы заливаете или инкрементно?
5 окт 18, 11:39    [21696144]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7663
Alexey Zarodov,

на картинке у Вас не параллельный пакет. В параллельном потоки между источником и получателем независимы.
5 окт 18, 12:00    [21696195]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7663
Владислав Колосов,

Вы это сделайте лучше отдельными пакетами,а макропоследовательность выполнения определяйте шагами джоба.
5 окт 18, 12:03    [21696208]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Alexey Zarodov
Member

Откуда:
Сообщений: 12
tarrus,

инкрементно.
5 окт 18, 12:35    [21696268]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Alexey Zarodov
Member

Откуда:
Сообщений: 12
Владислав Колосов,

речь была о Control Flow Parallelism.

https://www.dynamics101.com/ssis-parallel-processing/
5 окт 18, 12:38    [21696271]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
tarrus
Member

Откуда: Bergen
Сообщений: 831
Alexey Zarodov
Владислав Колосов,

речь была о Control Flow Parallelism.

https://www.dynamics101.com/ssis-parallel-processing/


Все верно. Один пакет - одна целевая таблица. В мастер пакете определяется воркфлоу. Пакеты - монстры, когда всё в одном очень неудобно обслуживать.
5 окт 18, 12:43    [21696276]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Alexey Zarodov
Member

Откуда:
Сообщений: 12
tarrus,

в Staging Area попадают измененные данные за день из источников. Далее эти данные перезаливаются в хранилище.
5 окт 18, 12:44    [21696277]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
tarrus
Member

Откуда: Bergen
Сообщений: 831
Alexey Zarodov
tarrus,

инкрементно.


Можно генерировать ключи в промежуточной таблице и при мердже по бизнес-ключу их же и переносить. Только после truncate промежуточной таблицы первое значение для identity нужно перенастраивать на большее чем уже есть в основной таблице.
5 окт 18, 12:47    [21696279]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Alexey Zarodov
Member

Откуда:
Сообщений: 12
tarrus,

т.е. я могу сделать на каждую целевую таблицу отдельный пакет и отдельную промежуточную таблицу. Плюс пакет Merge/Switch (его можно в транзакции на случай ошибок).
Далее в мастер пакете уже выполняю всех их?
5 окт 18, 12:48    [21696282]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
Alexey Zarodov
Member

Откуда:
Сообщений: 12
tarrus,

интересный совет, спасибо, обмозгую на выходных.
5 окт 18, 12:49    [21696283]     Ответить | Цитировать Сообщить модератору
 Re: Параллельное выполнение SSIS пакета  [new]
tarrus
Member

Откуда: Bergen
Сообщений: 831
Alexey Zarodov
tarrus,

т.е. я могу сделать на каждую целевую таблицу отдельный пакет и отдельную промежуточную таблицу. Плюс пакет Merge/Switch (его можно в транзакции на случай ошибок).
Далее в мастер пакете уже выполняю всех их?


Да, в общих чертах всё верно. Дальше шаги вправо и влево в зависимости от потребностей бизнеса.
5 окт 18, 12:54    [21696292]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить