SSIS 条件拆分导致死锁错误

SSIS Conditional split results in deadlock error

我在基于 CDC 操作插入或更新的 SSIS 作业中有条件拆分。删除实际上并没有删除,它们只是将行标记为已删除(因此它也是一个更新语句)。

这是它的样子:

与红色 x 关联的错误消息是

"Transaction (Process ID 67) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.".

我试图在其中添加一个额外的输入箭头,因此它一次只运行一个更新,但它不允许我这样做。

我怀疑 FactWaybillTrans 已在目的地检查 table 锁定。这通常是您在加载大量数据时想要的。但是,由于您还想更新相同的东西,这将与锁发生冲突,从而导致死锁。即使不检查 table 锁,默认锁也可能升级为完全锁。

我希望将我的更新暂存到 table (stage.CDCWaybillUpdates),然后在数据流之后触发执行 SQL 任务。更干净,没有死锁的机会。

你也许可以伪造它,但它是完全不可靠的。在 NumRowsUpdated 和 Update 之间添加排序操作。这可能会引起足够的阻力,以便 OLE DB 目标在更新开始之前完成并释放其锁定。如果它的速度不够慢,则以相反的方向对相同的数据进行排序。可怕的、骇人听闻的方法,但有时你不得不做傻事。