Вопрос

Для всех ETL, которые я написал до сих пор, я никогда не делал их транзакциями - т.е., если таблица 4 не работает, откатите все обратно.

Какова лучшая практика в этом отношении?

Кому "BeginTran + Commit" или не "BeginTran + Commit"

РЕДАКТИРОВАТЬ: у меня есть один главный пакет, вызывающий 4 других пакета. Можно ли свернуть их все в одну транзакцию?

Это было полезно?

Решение

begin + commit в управляемых размерах партии. Вы не хотите заключать импорт по 6 часов в одну транзакцию каждую ночь. Держите свои партии в размере, который может закончиться через 2-3 минуты максимум. То, что вы столкнетесь с проблемами чистоты данных, которые приведут к сбою ETL - это само собой разумеющееся, поэтому, по крайней мере, уменьшите влияние на что-то управляемое (т. Е. Не запускайте откат, который будет длиться еще 6 часов) .

Другие советы

В SSIS я всегда начинаю Trans + Commit . Я хочу убедиться, что я могу перезапустить пакет без проблем (или необходимости найти, какие строки были вставлены), если он потерпит неудачу.

Это намного облегчает восстановление и очистку.

Вы часто перемещаете слишком много данных в ETL для использования транзакции SQL (журнал должен хранить ВСЕ данные для отката, помните). Я предпочитаю разрабатывать пакеты таким образом, чтобы их можно было повторно запускать без разрушения. В идеале они должны быть настроены так, чтобы, если они умирают в середине потока, вы могли просто запустить их, и они продолжат где-то примерно там, где они остановились. Иногда для этого есть снижение производительности, но я думаю, что оно того стоит.

Технически вы можете свернуть пакеты в одну транзакцию; практически, а может и нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top