我们的仓库有一个增量加载例程,它使用 Rowversion 获取 OLTP 数据库中的大部分最新更改。它每 10 分钟运行一次,每天会卡住一到两次。
(NOLOCK)
除了包含正在测试的 ROWVERSION 的两个表之外,它从中提取的几乎所有表都有一个提示。(我们只测试两个最新表的更改。其余的可以通过完整的隔夜重新填充来处理。这会带来一些风险,但我们似乎正在侥幸逃脱。)
我猜这个挂起发生在我们在该表中的记录上遇到持久块的地方。看到完全一致性在我们的仓库中并不重要,我想(READPAST)
在那些经过行版本测试的表上,并在下次空闲时挑选那些锁定的表。
有没有一种简单的方法可以有效地做到这一点?我有一两个想法,但它们似乎太复杂了,我无法正确理解行版本控制。
本质上,我不介意记录需要 20 分钟而不是 10 分钟才能达到一致性,但我确实介意通过诉诸(NOLOCK)
ROWVERSION 敏感表来完全丢失记录的提交版本。