SSIS数据流与自定义传输脚本与批量插入比较

3
当将一个数据库中的视图结果从一个运行 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批量插入

我不认为这和使用自定义脚本有什么不同,只是没有加上只适用于表/视图而不是存储过程的固定性。


我意识到这不完全是一对一的比较,因为各种选项都提供了额外的日志记录和错误处理等级,但假设我不需要任何日志记录来尝试使比较尽可能公平。


1
“最有效率”是什么意思?开发时间最短?执行速度最快?代码行数最少?CPU、RAM或I/O使用最低?最容易调试?最容易维护? - Pondlife
1
抱歉,我指的是执行效率(最快时间和最低的CPU、RAM和IO使用)。 - GarethD
2个回答

3
根据这篇SO文章,BULK INSERT的性能比SqlBulkCopy更好。然而,根据这篇文章,DataFlow任务优于Bulk Insert SSIS任务。

3

这并不是直接回答你的问题,但是...

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

较长的答案是SSIS批量插入任务很可能是最慢的,因为它只能加载平面文件数据。为了使用它,您必须在重新加载目标服务器之前将数据导出到源服务器上的文件中。如果您的服务器之间的WAN连接非常慢,那么这可能是有用的,因为您可以在复制之前压缩文件以最小化数据量,否则它只会增加更多的工作量。

关于SSIS和SqlBulkCopy之间的区别,我个人没有使用过SqlBulkCopy,所以我只能建议如果没有明显的“赢家”,您可以首先选择最简单、最易于维护的实现方式,不要担心找到最快的解决方案,直到您真正需要为止。代码只需要运行得足够快,而不是尽可能快,从您的问题中并不清楚您是否真的有性能问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接