症状
假设你使用 Microsoft SQL Server 2012 Service Pack 2 (SP2)合并复制。 通过在发布服务器上执行 sp_mergemetadataretentioncleanup 来清理元数据时,即使所有订阅者最近已成功同步,也无法删除元数据。 在这种情况下,由于元数据过多,同步时间可能会显著增加。注意 在 " last_local_recguid " 列中有一个 null 值,或者发布者端的sysmergesubscriptions表中的某些订阅服务器的last_local_recgen列中存在旧代。
原因
出现此问题的原因是引入了一些更改,以减少合并元数据清理过程中不收敛的可能性。 若要实现此目的,清理将验证哪些生成仍处于活动状态,以避免删除这些生成,然后通过不经常同步的订阅者重新引入它们。 此检测机制可能会将某些生成从清理列表中排除,即使它们不再位于保留期内。 在某些情况下,这可能会增加元数据表的大小。
解决方案
此问题首先在 SQL Server 的以下累积更新中修复。
SQL Server 2014 SP1 的累积更新1 /en-us/help/3067839
SQL Server 2012 SP2 的累积更新4 /en-us/help/3007556
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。