Optimization SSIS-循环内的连接管理
我有以下SSIS包: 问题是在Foreach循环中,每次迭代都会打开和关闭一个连接 在运行SQL Profiler时,我看到了一系列:Optimization SSIS-循环内的连接管理,optimization,ssis,Optimization,Ssis,我有以下SSIS包: 问题是在Foreach循环中,每次迭代都会打开和关闭一个连接 在运行SQL Profiler时,我看到了一系列: 审核登录 RPC:已完成 审核注销 登录和实际执行工作的RPC的持续时间最短。但是,注销的持续时间很长,每次都会持续几秒钟。这会导致作业运行非常缓慢,需要花费许多小时。在测试服务器或独立笔记本电脑上运行时,我也会遇到同样的问题 有人能建议我如何更改软件包以提高性能吗 另外,我注意到,当从VisualStudio运行包时,它看起来好像继续运行,组件块变为琥珀
- 审核登录
- RPC:已完成
- 审核注销
罗伯。你试过做以下事情吗 在循环中使用的连接的连接管理器中,右键单击并选择“属性”。在连接的属性中,找到“RetainSameConnection”,并将其从默认值False更改为True。这将使您的包在整个包运行期间保持连接。您的探查器可能会如下所示:
- 审核登录
- RPC:已完成
- RPC:已完成
- RPC:已完成
- RPC:已完成
- RPC:已完成
- RPC:已完成
- 审核注销
最终审核注销发生在包执行结束时。您是否尝试过并行或串行运行数据流任务?您很可能会分解for循环,以使您能够并行运行每个“set”,因此,尽管登录/注销可能仍然很昂贵,但您将同时执行N次。在单个查询中运行一批操作时,SQL Server的性能最好。是否可以重新设计您的包,使其在一次调用中批量更新,而不是像您在这里使用的那样使用for循环的过程工作流 如果应用程序和RPC的设计允许(或者可以进行重构以允许),这可能是提高性能的最佳解决方案 例如,与以下内容不同:
for each Facility
for each Stock
update Qty
查看是否可以创建一个结构(使用SQL或具有单个连接的批量更新RPC),如:
如果您控制RPC的实现,RPC可以通过委托给另一个执行批处理操作的API来维护相同的API(如果需要),但指定一个记录限制(其中record=someRecord)。我已经尝试为外循环和内循环中的控件设置唯一的连接管理器。第一次迭代工作正常,然后出现错误:[Container[40]]错误:无法获取外部列的属性。您输入的表名可能不存在,或者您对该表对象没有选择权限,并且尝试通过连接获取列属性的另一种方法失败。详细的错误消息如下:提供程序返回了一个空的架构表。通过查询System.Data.SqlClient.SqlConnection,未找到表“dbo”“CONTAINER”的列信息。
update Qty
from Qty join Stock join Facility
...