我的数据流任务锁定存在问题,此任务会比较来自同一服务器的几个表,并将结果插入到正在比较的其中一个表中。正在插入的表由NOT EXISTS子句进行比较。
执行快速加载时,任务会在执行常规插入时冻结而不会出现错误,从而导致死锁错误。
我有两个其他任务对同一个表执行相同的操作,它们工作正常,但插入的信息量很小。我没有并行运行这些任务。
我正在考虑使用没有锁定提示来解决这个问题,因为这是写入cerain表分区的唯一任务,但是我只是得出这个结论,因为除了使用temp之外我无法弄清楚其他任何事情表格或散列反连接。
答案 0 :(得分:3)
可能你有所谓的死锁情况。您在DataFlow任务(DFT)中有两个单独的连接实例到同一个表。第一个conn实例运行SELECT
并在表上放置共享锁,第二个运行INSERT
并放置页面或表锁。
关于可能原因的几句话。 SSIS DFT读取表行并批量处理它。当行数较小时,读取在一个批处理中完成,并且在插入发生时消除共享锁定。当行数很大时,SSIS会将行拆分为多个批次,然后对其进行处理。这允许在数据源完成读取之前执行DFT数据源之后的步骤
设计 - 在同一数据流中读取和写入同一个表并不好,因为可能存在锁定问题。如何解决这个问题:
最通用的方式是第二种方法,附加表格。第三种是仅适用于MS SQL。