VS2017 SSIS Parallel Processing error (?)
我正在尝试运行并行进程将Excel文件读取到OLEDB目标。但是在运行时,ssis不显示错误,尽管它只是停止并声明:
"包执行完成。单击此处切换到设计模式,或从"调试"菜单中选择"停止调试"。
没有用并行进程插入任何行,我在消息列表中找不到这种"完成"的根本原因。我提供了一个屏幕截图作为示例:
MaxConcurrentExecutables设置为5,run64bit属性设置为true(false不更改任何内容),EngineThreads属性设置为1。
有人能帮忙解决这个问题吗?
- 如果数据流任务按顺序执行,会发生什么?
- 你确定你的桌子是空的吗?有时它是一个视觉错误,实际上它已经插入了数据。
- @holder:如果数据流任务按顺序执行,它将毫无问题地运行。但是,对于完全加载,循环将必须遍历至少8000个文件。并行处理可以将总时间减少到最多50%。
- @托马斯不幸的是,这不是一个视觉缺陷。我检查了SQL Server中的表,但这些表是空的。
- @Marcvandewall好吧,我错过了for循环。也许您缺少for循环正在迭代的一些变量映射?请添加一些有关测试容器中数据流正在执行的操作的更多信息/图片。
- @holder foreach循环正在迭代包含Excel文件的文件夹。这些Excel源包含两个工作表。让我们称它们为foo和bar。在数据流任务中,会发生以下情况:dft 1:导入工作表foo-->dc更改类型->导出到临时表:临时foo dft 2:导入工作表栏->dc更改类型->导出到临时表:临时u栏。但是,我必须注意,这两个数据流任务都是从同一个源文件读取的,但导出到不同的临时表。
- @Marcvandewall可能与性能问题/超时有关。机器运行时的内存使用情况如何?您是否尝试将其部署到SSIS服务器并在那里运行?
- @不幸的是,我不能将它部署到SSIS服务器,因为我的同事在处理生产和开发数据时只运行一台服务器。他们不想让我访问这个服务器。我可以在当地查一下,但我认为这不应该给这个问题太多的时间。规格为:Windows 10 Enterprise Intel(R)Xeon(R)CPU E3-1505M 2.81GHz RAM:32GB系统类型:64位操作系统,基于x64的处理器
- @Marcvandewall好的,我会尽量少加载一些文件,看看是否有什么不同。
- 测试容器似乎仍在运行-您在返回设计模式之前等待了多长时间?我在过去也遇到过类似的问题,流程没有完成,但vs说是的。
- @Marcvandewall你能发布一张双数据流和foreach循环编辑器的图片吗?
- @Marcvandewall两个问题。1.)如果禁用其中一个数据流,作业是否会加载数据?2.)在任何一个数据流中,是否从加载文件的同一个表中检索数据(即,将现有记录与传入记录进行比较)?这两者都指向来自文件或SQL服务器的某种类型的阻塞。但是,如果目标任务设置为发出表锁,则后者可能会导致错误。
- 如果按顺序运行2个DFT,它会运行吗?当SQL Server运行paralell时,您是否尝试在其上查看活动监视器?可能是锁什么的?
- @Tyron78我至少等待了15分钟,但仍然没有数据加载到临时表中。
- @Jwezzy我试图禁用其中一个任务,但它起作用了。我把我的"答案"贴在下面(这在一定程度上解释了正在发生的事情)。所以是的,这个注释可能是答案,因为我认为文件(在本例中是Excel)被"锁定",无法检索到任何数据。
- @托马斯是的,DFT任务是按顺序运行的,这就是我现在使用它们的方式。我想使它们平行,这样加载一堆Excel文件会更快。
SSIS不能同时读取同一文件。是的,您遇到了锁定问题。
解决方案是使用一个数据连接和一个数据流。在数据流中,从文件中读取数据,然后添加一个多播,这将允许您根据需要多次复制数据流。从那里,将两个数据流中发生的任务合并为一个。
最终的效果是,您将拥有一个数据流、一个数据源、一个多播、两个可以进行某些转换的数据管道和两个数据目标。
我不完全确定这是不是真的,但我想我知道失败的原因。
它突然"停止"执行的原因可能是因为一旦ssis从Excel文件读取数据以导入数据,它就会"锁定"Excel文件。第二个数据流任务打开或访问文件,因为它已经被数据流任务打开。见下图.。
如果有人能证实这一点,我们将不胜感激!
- 关于你的问题的解决办法,请看我的答案。
- 因为同一个文件不能读取两次。如果这就是你所做的,那就是你的错误。这就是为什么我要你检查锁定错误。当您读取Excel或CSV之类的文件时,它会在后台打开文件,而您不能这样做两次。
- 然而,我担心的是,你没有在你的问题中陈述这一点。下次尽量说清楚一点。您只写了您的已读Excel文件(多个)。
- @托马斯,我道歉。我是一个实习初级开发人员,他是一个使用堆栈溢出的新手。仍在学习过程中:)。不过,谢谢你的帮助!