【问题标题】:SSIS Data flow vs Custom transfer scripts vs Bulk InsertSSIS 数据流与自定义传输脚本与批量插入
【发布时间】:2012-07-09 16:01:13
【问题描述】:

将视图结果从一台服务器上的数据库复制到新服务器上的另一个数据库(均运行 SQL Server 2008)时,以下哪种方法可能最有效?

1.具有 OLE DB 源/目标的 SSIS 数据流任务

2。自定义脚本

例如

using (SqlConnection connection = new SqlConnection(sourceConnectionString))
using (SqlCommand command = new SqlCommand(sourceQuery, connection))
{
    connection.Open();
    using (SqlDataReader reader = command.ExecuteReader())
    {
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnectionString))
        {
            bulkCopy.DestinationTableName = destinationTable;
            //Any Column mapping required
            bulkCopy.WriteToServer(reader);
        }
    }
}

3. SSIS 批量插入

我看不出这与使用自定义脚本有什么不同,但没有增加的不灵活,它只适用于表/视图而不适用于存储过程。


我意识到这与同类比较不太相似,因为各种选项都提供了额外级别的日志记录和错误处理等,但假设我根本不需要日志记录来尝试使比赛场地尽可能均匀.

【问题讨论】:

  • “最高效”是什么意思?最短的开发时间?最快的执行?最少的代码行?最低的 CPU、RAM 或 I/O 使用率?最容易调试?最容易维护?
  • 对不起,我指的是执行效率(最快的时间和最低的 CPU、RAM 和 IO 使用)。

标签: c# sql-server-2008 ssis


【解决方案1】:

根据this SO Post,BULK INSERT 的性能优于 SqlBulkCopy。但是,根据this 的帖子,DataFlow 任务优于 Bulk Insert SSIS 任务

【讨论】:

    【解决方案2】:

    这并不是直接回答您的问题,而是...

    您的问题的简短答案可能是使用具有代表性的数据集尝试不同的方法并亲自查看。这将为您的环境提供比 SO 上的任何人都更有意义的答案,并且是了解每个选项所涉及的工作和问题的好方法。

    更长的答案是 SSIS 批量插入任务很可能是最慢的,因为它可以only load flat file data。为了使用它,您必须先将数据导出到源服务器上的文件,然后再将其重新加载到目标服务器上。如果服务器之间的 WAN 连接速度非常慢,这可能会很有用,因为您可以在复制文件之前对其进行压缩以最小化数据量,否则只会增加更多工作量。

    至于 SSIS 和 SqlBulkCopy 之间的区别,我对 SqlBulkCopy 没有个人经验,所以我只能建议,如果没有明确的“赢家”,请先使用最简单、最容易维护的实现,然后不要'在您真正需要之前,不必担心找到最快的解决方案。代码只需要运行得足够快,而不是尽可能快,并且从您的问题中不清楚您实际上存在性能问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多