2013-12-15 93 views
2

根据从源到两个目标(两者都是同一个表)的条件,我们使用条件拆分将其拆分为两部分。它之前运行良好,但是现在我们面临着这个任务中的死锁问题。错误如下:事务(进程ID 72)被锁死

SSIS错误代码DTS_E_OLEDBERROR。发生了OLE DB错误。错误 代码:0x80004005。 OLE DB记录可用。资料来源:“微软 SQL Server本机客户端10.0” HRESULT:0x80004005说明: “事务(进程ID 72)已被死锁的锁资源与 另一个进程,并已被选作死锁牺牲品重新运行 交易

我们已经设置好的OLEDB目标编辑器的属性与TABLE LOCK和最大插入提交大小为1000000

我是新来的SSIS,请帮我解决这个问题!

这里是数据流任务的捕捉 enter image description here

+0

死锁图表说相关进程是什么?除了SSIS包之外,可能还有另外一名玩家...... –

+0

请帮助激活死锁图表。im没有意识到它 – Harry

+0

如果您至少在2008年,您可以从默认SQL Server扩展事件中获取死锁图表会话(只要你在僵局被抛出后不久检查它) –

回答

1

我建议删除一个目标组件(以便您没有2个目标组件)。下面是关于如何做到这一点的几个建议:

  • 添加UNION ALL,并有Less_than_1输出和Less_than_2输出去了。然后有联盟所有输出到目标表
  • 分析您条件性拆分的条件,看看你是否可以将它们合并成一个(例如ColumnValue is less than 1 OR ColumnValue is less than 2)。我只是建议这样做,因为数据将进入同一张表。
  • 拆分现有的数据流进入2个独立的数据流(每个条件)

如果不知道您的背后条件性拆分特定逻辑,我无法想到的任何其他方法。

+0

拆分是为了使加载性能更好......只是根据行ID拆分奇数和偶数行...我怀疑目标锁定选项是否来自图片在这里在这个问题上... – Harry

+0

我很好奇,分裂如何提高负载性能? – gannaway

+1

行被分成两部分并行加载,例如对于50000条记录,并行加载为250000,这使得加载到同一个表中的速度很快。请检查此链接... http://henkvandervalk.com/speeding-up-ssis-bulk-inserts-into-sql-server – Harry

相关问题