I have some SSIS package that are loading warehouse dimension tables. There are two input flows, one from the source and one from the warehouse table for comparison. There are five output flows that either insert to, or update, the warehouse tables. Occasionally one of these packages hangs part way through processing.
Looking at SQL Server it seems it has deadlocked its self. It looks like the input source is holding a lock that's preventing an update, and there it sits indefinitely.
For one package I created five tables for each of the output flows, then come back in later in the control flow and use SQL Tasks to apply the intermediate tables to the warehouse. This is a lot of work and overhead, but I had to get one case working ASAP.
Is there a way to get SSIS to be better behaved, vis-à-vis locking and deadlocks, or is there a better design patter for this application?