SQL 服务器在大表上使用 TableDiff

SQL Server Using TableDiff on large tables

我们有一个进程使用 SQL 服务器的惊人 table差异通过:

Microsoft SQL Server0\COM\Tablediff.exe

它是 SQL Server 2008 R2。它从一个实例连接到另一个相同的实例。它工作得很好!

我遇到这样一种情况,现在有 10767594 条记录的 table 需要 2.5 小时才能完成,作业中只有一个 table。我该如何改进?

进程由Windows计划任务触发,调用.bat文件,.bat文件包含没有问题的推荐代码。我们有几个这样的地方,已经有一段时间了。这只是处理一个实例到另一个实例的大 table 的一项工作,它花费的时间太长了。

我发现源 table 确实有索引,但目标 table 没有。我给这个做个索引table,还有什么办法呢?

table diff 运行 索引更好吗?

有没有更有效地使用 table diff 的方法?

例如如果我捕获 lastProcessedID,我可以 运行 table 下一次对所有记录进行 Diff where id > lastProcessedID 吗?

任何建议都很好。提前谢谢你

已编辑:

我的解决方案 - 这是一个非常非常大的惊喜。正如我上面提到的,超过 1000 万条记录 table 除了 2 个索引(在源上)之外在源和目标上是相同的。由于这是一个内部生产服务器,在等待下班后,我将索引应用于源。现在我 运行 tableDiff 作业根本没有改变,它在 2 分钟内完成。 2.5 小时到 2 分钟!

我接受了下面的答案,因为它非常有用。我确实沿着合并复制路径走下去,但是在设置复制和发布之后,我发现生产实例无法成为订阅者,因为安装时没有勾选复制。正如 Jason 所说,这是合理数量的研究、学习和设置。由于我不是 DBA 并且之前没有看过这个,所以这是一次值得体验的经历。

性能问题是因为远程查询从每个地方提取每条记录进行比较以生成输出。索引可以略微帮助从每个位置更快地拉动,但不太可能很重要。

增量方法肯定更好。我不相信 tablediff 直接支持比较 2 个查询。如果是这样,您可以执行类似 EXCEPT 或 INTERSECT 的操作来进行比较。如果您试图使这些数据库保持同步,为什么不考虑其他解决方案,例如日志传送、镜像、SSIS、复制、集群等。