【发布时间】:2018-06-02 17:16:38
【问题描述】:
对于 sys.change_tacking_tables 中启用特定更改跟踪的表,begin_version 和 min_valid_version 列之间的主要区别是什么?
我的数据库中每个表(1000 多个表)的两个列的值都相同。
我也尝试过截断和插入操作。但是,看不到任何变化。
我们什么时候可以看到两列的不同值,请举例说明。
【问题讨论】:
标签: sql-server change-tracking
对于 sys.change_tacking_tables 中启用特定更改跟踪的表,begin_version 和 min_valid_version 列之间的主要区别是什么?
我的数据库中每个表(1000 多个表)的两个列的值都相同。
我也尝试过截断和插入操作。但是,看不到任何变化。
我们什么时候可以看到两列的不同值,请举例说明。
【问题讨论】:
标签: sql-server change-tracking
begin_version - 开始对表进行更改跟踪时的数据库版本。此版本通常指示何时启用更改跟踪,但如果表被截断,此值会重置。
当您在数据库级别启用更改跟踪时,此时的数据库版本被视为 1。在此数据库上提交的每个事务都会按顺序增加版本。所以每个表对应的begin_version基本上就是对特定表启用change_tracking时数据库的版本。
min_valid_version - 可用于表的更改跟踪信息的最低有效版本。
根据您为更改跟踪自动清理配置的保留期,您的 min_valid_version 会在您的自动清理线程每次唤醒时更新。更改跟踪自动清理线程每 30 分钟在后台唤醒一次,并为所有启用更改跟踪的数据库更新无效的清理版本。
例如,如果您的默认保留期为 2 天,则任何时候此线程唤醒时,它都会根据从现在起 2 天前提交的事务确定数据库的最大版本。您可以查询 sys.dm_tran_commit_table 以查找有关此的更多信息。 commit_ts 是我刚才在上面几行中谈到的版本。
【讨论】: