嗨,我正在尝试优化SSIS包,当我执行Upsert / delete时,它从远程MariaDB源中的表中获得了大约9300万行。该表还包含大约63列。
目前我在我的软件包中使用Sort和Merge Join,但是我已经阅读了一些指南,建议在服务器中进行排序部分而不是SSIS DT中的排序功能,因为它会对SSIS服务器内存造成负担。
由于我目前在Azure数据工厂中使用此解决方案,因此运行程序包失败(最常见的是Times out,尽管我已经在包侧和Azure数据工厂中增加了Time Out属性)。
建议的解决方法是什么?
如果我理解正确并且正如我之前提到的那样,我可以通过对DB-Server-Side进行排序来跳过SISS服务器上的负载。但由于我是整个SQL和SSIS的新手,我不太确定SQL命令中会出现这种情况。
我也是关于批处理的,但即使在这里我也不确定它在SSIS中是如何工作的。
这里推荐什么?
我的SSIS-Package现在看起来像这样:
我遵循这种类型的例子:Synchronize Table Data Using a Merge Join in SSIS
(仅供参考:红色错误图标在那里,因为我在截图期间丢失了连接,否则这是一个完全有效的解决方案。)
我有两个建议:
在OLE DB源中将访问模式更改为SQL命令。并使用ORDER BY子句:
Select * from table ORDER BY col1, col2
之后,您应该打开OLE DB Source高级编辑器(右键单击OLE DB源,显示高级编辑器)转到列选项卡并将outputIsSorted
属性更改为True
,并设置更改用于ORDER BY子句中的列的SortKeyPosition
。
我不太了解MariaDB SQL语法,但我将在SQLite和Oracle中提供一些示例:
包中有一些问题:
一些建议: