我正在使用 SSIS 在两个数据库之间同步数据。我过去使用过 SSIS 和 DTS,但我通常会为这种性质的事物编写应用程序(我是编码员,这对我来说更容易)。
在我的包中,我使用了一个返回大约 15,000 行的 SQL 任务。我已经将它连接到一个 Foreach 容器,并在其中将结果集列值分配给变量,然后将这些变量映射到提供给另一个 SQL 任务的参数。
我遇到的问题是调试,而不仅仅是更复杂的调试,如断点和运行时评估值。我的意思是,如果我在调试而不是不调试的情况下运行它,则需要数小时才能完成。我最终在 Delphi 中重写了该过程,以下是我想出的:
完全推送数据:
这会拉取 15,000 行,为每一行更新一个目标表,然后拉取 11,000 行并为每一行更新一个目标表。
调试:
Delphi App:139s
SSIS:4小时46分钟
未调试:
Delphi App:132s
SSIS: 384s
数据更新:
这会提取 3,000 行,但不需要或对目标表进行更新。然后它会提取 11,000 行,但同样不需要或对目标表进行更新。
调试:
Delphi App:42s
SSIS:1小时10分钟
不调试:
Delphi App:
34s SSIS:205s
奇怪的是,我感觉大部分时间都花在调试上,只是更新 Visual Studio 中的 UI 元素。如果我查看进度选项卡,每次迭代(总共数千个)都会将一个节点添加到树中,并且随着过程的进行,这会变得越来越慢。尝试停止调试通常不起作用,因为 Visual Studio 似乎陷入了更新 UI 的循环中。如果我检查 SQL Server 的探查器,则没有实际工作正在完成。我不确定这台机器是否重要,但它应该能胜任工作(四核、4 gig 内存、512 mb 视频卡)。
这种行为正常吗?正如我所说,我是一名编码员,所以我为这类事情编写应用程序没有问题(事实上,我编写应用程序所需的时间比在 SSIS 中“绘制”它要少得多,但我认为随着在 SSIS 中完成更多工作,边距会缩小),但我试图找出像 SSIS 和 DTS 这样的东西适合我的工具箱的位置。到目前为止,没有什么让我真正印象深刻。也许我以某种方式滥用或滥用 SSIS?
任何帮助将不胜感激,在此先感谢!