嗨,我目前正在尝试执行Upsert / delete来优化SSIS包,该Upsert / delete处理来自远程MariaDB源中的表的约9,300万行.
该表还包含大约63列.
当前,我在程序包中使用“排序和合并联接”,但正如我阅读的一些指南所建议,建议在服务器中而不是在SSIS DT中使用排序功能来对服务器进行排序,因为这会对SSIS服务器内存造成负担.
由于我当前在Azure数据工厂中使用此解决方案,因此运行程序包会失败(即使我增加了程序包端和Azure数据工厂中的“超时”属性,但多数情况下都是超时).
建议的解决方法是什么?
如果我理解正确并且如前所述,则可以通过对DB-Server-Side进行排序来跳过SISS服务器上的负载.但是由于我是整个SQL和SSIS的新手,所以我不太确定SQL Command中的排序方式如何.
我也虽然有关于批处理的信息,但是即使在这里,我也不确定如何在SSIS中工作.
这里推荐什么?
我的SSIS软件包现在看起来像这样:
我遵循了此类示例:Synchronize Table Data Using a Merge Join in SSIS
(仅供参考:红色错误图标在那里,是因为我在屏幕截图期间失去了连接,否则,这是一个完全正常的解决方案.)
解决方法:
我有两个建议:
服务器端排序
在“ OLE DB源”中,将访问模式更改为“ SQL命令”.并使用ORDER BY子句:
Select * from table ORDER BY col1, col2
之后,您应该打开OLE DB源高级编辑器(右键单击OLE DB源,显示高级编辑器),转到“列”选项卡,将outputIsSorted属性更改为True,并设置更改ORDER BY子句中使用的列的SortKeyPosition.
> SSIS sorted data flows
> Where is the IsSorted property?
分块读取数据
我对MariaDB SQL语法不了解,但是我将在SQLite和Oracle中提供一些示例:
> Reading Huge volume of data from Sqlite to SQL Server fails at pre-execute
> Getting top n to n rows from db2
> SSIS failing to save packages and reboots Visual Studio
更新1-包问题
软件包中存在一些问题:
>您正在同一张桌子上写字
>您正在对大量数据执行更新和删除表
>您正在使用合并联接
一些建议:
>尝试使用暂存表而不是从同一表读取和写入,因为您正在从同一目标表读取,写入,删除和更新.
>在目标表中使用分区,该分区允许从特定分区而不是整个表中删除和更新记录