如果花费太多时间,SSIS会跳过数据流任务

时间:2017-03-09 13:32:34

标签: ssis

我正在创建一个ssis包,它应该将数据从数据库传输到另一个数据库。但是,如果数据流任务需要花费太多时间来执行,我希望它停止并继续执行其他任务。

我已经尝试将CommandTimeout属性设置为数据流源,但数据流任务不会停止运行。

1 个答案:

答案 0 :(得分:1)

  

如果我设置commandtimeout属性,为什么不停止任务?

我猜测SSIS每次写入源组件的缓冲区时都会调用READ方法。每次调用read方法都会重置commandtimeout。这里有一些信息:

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

因此源需要足够慢才能在命令超时期间返回任何行。这听起来不适用于您的场景。

建议的替代方案是:

  • 将数据流放入另一个包中
    • 从脚本任务中调用包
    • 导致进程在脚本
    • 中设置一段时间后超时
  • 或者,将数据流放在另一个包中
    • 从bat文件调用包,让它在自己的进程中运行,直到它完成为止。

据我所知,源系统没有正确的索引,这使得读取过程变慢。听起来有多个表,您可以考虑单独读取它们并在目标服务器上暂存它们。这可以避免可能由JOIN产生的错误查询计划。另外,确保您写入的表不是瓶颈 - 删除索引,约束,添加tablock。