我使用部署到SQL Server 2012实例的SQL Server数据工具创建了一个SSIS包,该实例经历了使用SQL Server Destination对象在同一服务器上将大量数据从一个数据库移动到另一个数据库的过程。
我正在使用带有SQL查询的OLE DB Source对象,该查询按照我的登台表的聚集索引的顺序排序。我在高级编辑器中标记了Source对象,数据已经排序,并且列的SortKeyPosition也设置为1。我相信这应该避免命中TempDB,但我仍然在执行期间看到很多关于TempDB的活动。该程序包是目前服务器上唯一运行的程序包。
以下是包执行的过程。如果我在OLE DB目标中运行完全相同的包交换,则数据将直接进入.mdf文件,而TempDB上没有任何活动。该程序包使用SQL Server目标在大约30分钟内运行,使用OLE DB目标在大约20分钟内运行。我只是使用OLE DB目的地,但它偶尔会抛出这样的网络错误:“TDS流中的协议错误”。
我已经阅读了很多关于这个问题的白皮书和文章,他们似乎都描述了我正在使用的过程,并建议在OLE DB对象上使用SQL Destination对象来提高性能。 (例如:http://sql10.blogspot.com/2010/07/ssis-check-list-for-minimally-logged.html和http://msdn.microsoft.com/en-us/library/dd425070(SQL.100).aspx)。
步骤1)截断登台表
步骤2)禁用登台表
上的所有非聚集索引步骤3)从登台表中删除主键约束
步骤4)将数据复制到临时表
步骤5)启用登台表上的所有非聚集索引
步骤6)将主键添加回登台表
SQL Destination对象中是否存在我缺少的设置或可能导致此活动的其他设置?如果您有任何建议,请提前致谢。
答案 0 :(得分:1)
您的信息已过期 - 现在首选OLE DB目标,无论是灵活性还是速度,参考:
http://www.mattmasson.com/index.php/2012/06/should-i-use-the-sql-server-destination/
您的结果似乎证实了这一点。