我正在尝试手动清理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吗?
答案 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>