【发布时间】:2015-08-31 16:26:17
【问题描述】:
我们有一个使用 SQL Server 惊人的 tableDiff 的进程:
Microsoft SQL Server\100\COM\Tablediff.exe
它是 SQL Server 2008 R2。它从一个实例连接到另一个相同的实例。它工作得很好!
我有一种情况,现在有 10767594 条记录的表需要 2.5 小时才能完成,它只有一个表在工作中。我该如何改进?
该进程由 Windows 计划任务触发,这会调用 .bat 文件,.bat 文件包含没有问题的推荐代码。我们有几个这样的地方并且已经有一段时间了。这只是从一个实例到另一个实例处理大表的一项工作,耗时太长。
我意识到源表确实有索引,但目标表没有。我会在这张表上放一个索引,我还能做什么?
table diff 使用索引是否运行得更好?
有没有办法更有效地使用表差异?
例如如果我捕获了lastProcessedID,我可以下次对所有记录运行tableDiff where id > lastProcessedID吗?
任何建议都会很棒。提前谢谢你
编辑:
我的解决方案 - 这是一个非常非常大的惊喜。正如我上面提到的,1000 万多条记录表在源和目标上是相同的,除了 2 个索引(在源上)。由于这是一个内部生产服务器,在等待了几个小时后,我将索引应用于源。现在我运行根本没有更改的 tableDiff 作业,它在 2 分钟内完成。 2.5 小时到 2 分钟!
我接受了下面的答案,因为它非常有帮助。我确实走上了合并复制路径,但是在设置复制和发布之后,我发现生产实例无法成为订阅者,因为在安装时没有勾选复制。正如杰森所说,这是合理的研究、学习和设置。由于我不是 DBA,并且在这值得体验之前没有看过这个。
【问题讨论】:
标签: sql-server sql-server-2008-r2 batch-processing