mysql-使用SQL命令中的“按/排序”和合并联接为数百万行优化SSIS包

嗨,我目前正在尝试执行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

mysql-使用SQL命令中的“按/排序”和合并联接为数百万行优化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-包问题

软件包中存在一些问题:

>您正在同一张桌子上写字
>您正在对大量数据执行更新和删除表
>您正在使用合并联接

一些建议:

>尝试使用暂存表而不是从同一表读取和写入,因为您正在从同一目标表读取,写入,删除和更新.
>在目标表中使用分区,该分区允许从特定分区而不是整个表中删除和更新记录

上一篇:如何在Java中按两列对csv文件进行排序?


下一篇:VS打包软件部署------ClickOnce应用安装 (各版本.net引导文件安装,再发布文档离线安装下载地址)