症状
假设您使用 Microsoft SQL Server 2012 Service Pack 2 (SP2) 合并复制。 通过在发布者执行 sp_mergemetadataretentioncleanup 来清理元数据时,即使所有订阅者最近都已成功同步,也无法删除元数据。 在这种情况下,由于元数据过多,同步时间可能会显著增加。
注意 发布者端 sysmergesubscriptions 表中的某些订阅者的 last_local_recguid 列中有一个 null 值,或者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 的每个新累积更新都包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
状态
Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。