0

我有一个使用部署到 SQL Server 2012 实例的 SQL Server Data Tools 创建的 SSIS 包,该实例使用 SQL Server Destination 对象将大量数据从一个数据库移动到同一服务器上的另一个数据库。

我正在使用带有 SQL 查询的 OLE DB 源对象,该查询按我的登台表的聚集索引的顺序排序。我在高级编辑器中标记了 Source 对象,表明数据已排序,并且列的 SortKeyPosition 也设置为 1。我相信这应该避免碰到 TempDB,但在执行期间我仍然看到 TempDB 上有很多活动。该软件包是当前服务器上唯一运行的东西。

下面是包执行的过程。如果我在 OLE DB 目标中运行完全相同的包交换,则数据将直接进入 .mdf 文件,而 TempDB 上没有任何活动。该程序包使用 SQL Server 目标运行大约 30 分钟,使用 OLE DB 目标运行大约 20 分钟。我只会使用 OLE DB 目标,但它偶尔会抛出这样的网络错误:“TDS 流中的协议错误”。

我已经阅读了很多关于这个问题的白皮书和文章,它们似乎都描述了我正在使用的过程,并且都建议使用 SQL Destination 对象而不是 OLE DB 对象来提高性能。(例如: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 目标对象中是否有我丢失的设置或其他可能导致此活动的设置?提前感谢您提供的任何建议。

4

1 回答 1

1

您的信息已过时 - 现在首选 OLE DB 目的地,既灵活又速度快,参考:

http://www.mattmasson.com/index.php/2012/06/should-i-use-the-sql-server-destination/

你的结果似乎证实了这一点。

于 2013-02-26T02:51:52.130 回答