我有一个table table_src,其中一个SQL Server DB中有300万列和20列 我想将数据加载到另一个服务器和SQL Server DB中的同一结构Table_dest中 我刚刚创建了一个OLEDB源,该源将从表_src获取数据,然后使用OLEDBCommand从table_dest删除现有数据 然后使用OLEDBDESTINATION将数据映射和加载来自Table_src的数据到table_dest。
但是这个过程花费了太多时间,因为数据很大,我知道这需要时间,但是在这种情况下,我可以优化或使用一些最佳实践来加载数据。
-
不要使用ole db命令。它执行单例操作,这意味着您将在远程服务器上发布3M删除。相反,将控制流程设计为
Execute SQL Task
,然后将Data Flow Task
设计。在评论中,您指出权限将成为一个问题,因为您不能发出截断表命令。相反,执行SQL任务将需要DELETE FROM dbo.MyTable;
来排出所有数据。 -
确保您将快速负载选项与OLE DB目标使用。这将锁定目标表以获得最佳的负载模式。您可能想尝试最大行提交大小(名称大致(。默认值为20亿左右,尝试从50000开始启动。这比一次批量的批次要小。这可以帮助目标服务器在将所有数据消失时获得一些呼吸空间。
其他会杀死您的表现的事情:
- 不良网络
- 数据流中的其他转换(我假设OLE DB源到Ole DB目标(
- 在Visual Studio本身中运行软件包
- 以32位模式运行软件包
- 调谐目标服务器
- 不要处理数据流任务中的LOB数据类型(Image/Object/(n(文本/(n(varchar(max(/varbinary(max((
除此之外,没有更多的详细信息,那就是我可以给您的建议,以使其快速发展。每小时不应该发送300万行。
在 oledb destination
下的 data access mode
中尝试使用fast load
的选择(在您的情况下table or view fast load
(
不要删除并插入日期。使用SSIS软件包使用SQL更改跟踪来插入增量数据。