带有批量数据加载的 SSIS 包

6 database-design ssis sql-server-2008-r2

我在周末为一位客户分析了一个 C# 程序,该程序基本上执行以下操作:

  1. 截断表
  2. 获取数据(这些来源是远程数据库或作业运行的本地数据库)
  3. SQLBulkCopy(.NET 类,到作业运行的数据库的目标表中)

大多数情况下 (1) 和 (2) 是通过存储过程调用完成的。我相信 SSIS 会更有效地处理这个过程。我的最终结果是确定 SSIS 是否可以做得更好,然后是设计包的最有效方法。

问题
在有大量记录的情况下,当 (2) 和 (3) 是同一个实例上的同一个数据库时,SSIS 会通过 BULK INSERT 任务获得更好的性能吗?或者只是将 (2) 中的过程调用更改为 a INSERT INTO,以消除对 (3) 的需求?

在 (2) 是远程源(同一网络上的另一个 SQL 实例)的情况下,SSIS 是否比通过 .NET SQLClient 更有效地处理从远程源提取数据?我不认为有很大的不同。

同样,当(2)是一个数据量相当大(800万+)的远程源时,最好在远程实例上有一个包导出数据;然后将该文件移动到目标服务器并批量加载它?

小智 4

对于800万行,我认为SSIS和SQLBulkCopy类之间不会有太大区别。在SSIS中,您必须确保在OLE DB目标中使用快速加载选项,否则肯定会更慢。如果源是本地的,您可以尝试 SQL Server 目标,它可能比 OLE DB 目标快一点。