清除作业

本部分提供有关变更数据捕获清除作业工作方式的信息。

清除作业的结构

变更数据捕获使用基于保持期的清理策略来管理更改表的大小。清除机制包含一个在启用第一个数据库表时所创建的 SQL Server 代理 Transact-SQL 作业。单个清除作业可处理所有数据库更改表的清除工作并将相同的保持值应用到所有定义的捕获实例。

清除作业可通过运行无参数存储过程 sp_MScdc_cleanup_job 来启动。此存储过程开始时,将从 msdb.dbo.cdc_jobs 中提取为清除作业配置的保持期和阈值。保持值用于计算更改表的新低水印。从 cdc.lsn_time_mapping 表的最大 tran_end_time 值中减去指定分钟数即可获得日期时间值形式的新低水印。然后,使用 CDC.lsn_time_mapping 表将该日期时间值转换为相应的 lsn 值。如果表中多个项共享相同的提交时间,则会选择与具有最小 lsn 的项相对应的 lsn 作为新低水印。该 lsn 值将传递到 sp_cdc_cleanup_change_tables 以从数据库更改表中删除更改表项。

注意注意

使用最近事务的提交时间作为计算新低水印的基准的优点在于:它可使更改在更改表中保留指定的时间。即使在捕获进程运行落后时也会出现这种情况。通过为实际低水印选择具有共享提交时间的最小 lsn,与当前低水印具有相同提交时间的所有项会继续保留在更改表中。

执行清除时,所有捕获实例的低水印会在单个事务中初次更新。然后,它会尝试从更改表和 cdc.lsn_time_mapping 表中删除过时项。可配置的阈值用于限制使用任何单个语句中所删除的项数。对任何单个表执行删除操作失败并不会阻止对其他表尝试执行该操作。

清除作业自定义

对于清除作业,是否可以进行自定义取决于在确定要放弃哪些更改表项时所采用的策略。传递的清除作业中唯一支持的策略是基于时间的策略。在这种情况下,新低水印是通过从处理的最后一个事务的提交时间减去允许的保持期而计算得到的。因为基础清除过程基于 lsn 而不是时间,所以可使用任何数量的策略来确定要保存在更改表中的最小 lsn。只有某些过程是严格基于时间的。例如,如果需要访问更改表的下游进程无法运行,则可以使用有关客户端的知识来提供故障保护。而且,尽管默认策略应用相同的 lsn 来清除所有的数据库更改表,但还可以调用基础清除过程以在捕获实例级别上进行清除。

请参阅

概念