有没有办法知道何时清理更改跟踪表?如何检查清理过程的最后一次发生?
背景:
我对数据库进行了更改跟踪,保留时间设置为 1 分钟:
ALTER DATABASE [test] SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 1 MINUTES)
我在我的测试表中进行了一些更新,然后等待比保留期更长的时间(比如说 3 分钟)。由于清理过程是异步的,我明白不能保证更改跟踪表会在 1 分钟后被清理。它可以在> 1 分钟的任何时间发生。
我发现这个过程可以手动调用清理过程:
EXEC sp_flush_commit_table_on_demand 100000
但它没有按预期工作..(更改跟踪行在保留期后仍然存在)
我使用下面的代码复制了这个,基本上,是的,如果你等待足够长的时间,并且自动清理是打开的,它会自行清理。它似乎受到最低限度的约束 - 也就是说,change_retention 设置更多的是建议而不是命令。
诚然,我还没有测试过真实世界的表活动等,但下面的链接包含有关这项工作的更多信息 - 它实际上更像是一个黑匣子,而不是任何东西。
链接:
MS 更改跟踪
Kendra Little 谈变更跟踪
歌词 - 由迪士尼提供
这就是我想出的。
sp_flush_commit_table_on_demand
仅清除syscommittab
而不是更改跟踪边表。执行
sp_flush_commit_table_on_demand
与清除更改跟踪边表无关。CHANGETABLE
功能依赖于两者syscommittab
并更改跟踪边表。select * from changetable(changes dbo.t, NULL) as ct
- 这将返回自我们作为最后一个同步版本dbo.t
传递以来的第一个版本以来对表的所有更改。NULL