在SQL Server中手动清理CHANGE TRACKING

时间:2018-11-28 16:51:25

标签: sql-server change-tracking

我正在尝试手动清理SQL Server 2017中的更改跟踪表。

我运行命令

exec sp_flush_CT_internal_table_on_demand 'mydb.data.foobar'

错误消息:

  

消息2501,级别16,状态1,过程sys.sp_MSflush_CT_internal_table_on_demand,第22行[批处理开始第40行]
  找不到名称为“ mydb.data.foobar”的表或对象。检查系统目录。

表“ mydb.data.foobar”确实存在。

以下成功返回:

select object_id('mydb.data.foobar')

有人手动清洁过CT吗?

2 个答案:

答案 0 :(得分:0)

有一个{strong>系统存储过程可用sys.sp_flush_commit_table_on_demand,以备我们希望以可配置的批量大小进行手动清理。但是,仅在无法使用自动清理管理变更跟踪内部表的情况下才应使用它。

每当运行手动清理时,还应禁用自动清理,否则它们可能会相互阻塞。

EXEC sp_flush_commit_table_on_demand 100000

使用类似这样的内容:

EXEC sys.sp_flush_CT_internal_table_on_demand 'Table_Name'

对我有用。我认为您错过了sys.

设置auto_cleanup = false基本上意味着清除已禁用,如果您遇到需要调试/调查的同步问题,则可以进行任何故障排除。

如果这没有帮助,请检查以下内容:Change tracking cleanup process in SQL Server 2016 and 2017

答案 1 :(得分:0)

这里的问题已经有好几年了,但我今天偶然发现了一个解决方案,因为我也遇到这个问题多年了。

对于将更改跟踪与 Logging 设置为 Simple 以外的其他内容结合使用的任何人,请参阅 KB4500403 并确保您已安装最新的累积更新。

本文提及大型事务日志,但也解决了更改跟踪清理通常无法正常工作的问题。在安装此累积更新之前,我不仅无法运行更改跟踪清理,而且还必须禁用自动清理,因为它整天将 CPU 内核保持在 100% 并为高度活跃的数据库生成 50GB 以上的日志文件。< /p>

以下是该问题的参考: https://support.microsoft.com/en-us/topic/kb4500403-fix-tlog-grows-quickly-when-you-run-auto-cleanup-procedure-in-sql-server-2014-2016-and-2017-41a5a303-b0b3-e9d8-a540-597ad27b584b