【发布时间】:2017-07-07 09:21:00
【问题描述】:
我有一个简单的 SSIS 包,可以在源和目标之间将数据从一台服务器传输到另一台服务器。
如果它的新记录 - 它插入,否则它检查 HashByteValue 列以及它是否与它的更新记录不同。
表包含大约 150 万行,并更新了大约 50 列。
当我开始调试包时,大约 2 分钟没有任何反应,我什至看不到绿色的复选标记。之后我可以看到数据开始流动,但有时它会停止,然后再次流动,然后再次停止,依此类推。
整个包长这样:
但如果我只做INSERT 部分(没有更新),那么它可以完美运行,1 分钟和目标表中的所有 150 万条记录。
那么为什么向更新记录的包添加另一个LOOKUP 转换会显着降低性能。
跟记忆有关系吗?我在lookups 中都使用了FULL CACHE 选项。
提高性能的方法是什么?
原因可能在自动增长文件大小:
【问题讨论】:
-
如有疑问,请追踪!
-
将数据和日志的自动增长增加到 100MB,看看是否有帮助。 1MB 太小了。您很少会使用默认的 10% 进行自动增长。
-
我已经编辑了我的帖子。您可以看到数据库的自动增长。谢谢
-
是的,抱歉,我不小心删除了关于 AutoGrowth 的原始评论。但这似乎是您问题的一部分,这是肯定的。
-
运行包时,检查进度选项卡——它是否处于预执行阶段?这很可能是由于您要更新的目标数据的预取导致的延迟。它必须先将它们加载到内存中,然后才能将它们与您的源数据进行比较。
标签: sql-server ssis lookup