作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 ADO NET Source 组件,它查询一个表以获取所有 700,000 条记录。
这连接到 SQL Server 目标组件。
处理前 100,000 条记录需要 23 秒(+ - 1 秒)。
接下来的 100,000 条记录需要额外的 50 秒。而且只会变得更糟。
下面是具体细节
我已经在目标数据库上尝试了以下三个不同的命令。
ALTER DATABASE AdamDB SET RECOVERY SIMPLE;
ALTER DATABASE AdamDB SET RECOVERY BULK_LOGGED ;
ALTER DATABASE AdamDB SET RECOVERY FULL ;
在所有 3 种情况下,前 100,000 条记录的时间都保持在 23 秒。
我也试过根据 ID 值放入一个 Conditional Split 组件
Default
SKU % 4 < 1
SKU % 4 < 2
SKU % 4 < 3
每个输出条件都有不同的 SQL Server 目标,我什至为每个目标创建了不同的连接管理器。
这些似乎都没有对性能产生任何明显的影响。
这是源连接管理器
这是我的源对象属性。
这是目的地的连接管理器
这是我的目标对象属性。
我怎样才能加快速度?
编辑
根据 Lamak 的建议,我尝试使用 OLE DB 目标而不是 SQL Server 目标。随着时间的推移,这似乎具有相同的速度结果和减速。
最佳答案
对于那些可能遇到相同情况的人......这是一个简单的修复,经过一些非常有指导和帮助的评论!
我最终使用了 OLE DB Source 和 OLE DB Destination 对象而不是 ADO 对象。
仅在目标上使用,而源仍然存在 ADO 仍然会产生缓慢的结果。
在源和目标上使用 OLE DB 解决了这个问题。
我现在总共在大约 55 秒内处理了 750,000 条记录!
关于.net - SSIS DataFlow 随着时间的推移显着减慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18217837/
我是一名优秀的程序员,十分优秀!