Vai*_*hur 3 replication sql-server sql-server-2014
我正在拼命寻找一些逻辑或脚本来检查命令,msrepl_commands其中已经移动到订阅者但尚未删除的命令数量。
我正在手动运行该程序:
EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 0, @max_distretention = 72
Run Code Online (Sandbox Code Playgroud)
但它没有删除任何行,即使我检查msrepl_commands并发现有 20M 行都出现在 2016-08-30 00:01:00 AM 和 2016-08-31 09:00:00 AM 之间,但是如果我运行分发清理然后它应该在循环中删除前 10K,直到行数达到 2000。
我对如何检查那些传递的命令感到有些困惑(msdistribution_status给了我分散的和未分散的命令,但这是累积的,我需要当前状态)。
我遇到这个问题的次数已经数不清了。出于某种原因,这可能是执行计划的差异,如果您手动运行它并缩小范围,它将比作业更快地完成。找出那里的最大日期,然后手动进行清理:
EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 78, @max_distretention = 80
EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 76, @max_distretention = 78
EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 74, @max_distretention = 76
EXEC dbo.sp_MSdistribution_cleanup @min_distretention = 72, @max_distretention = 74
Run Code Online (Sandbox Code Playgroud)
我知道这听起来很荒谬,但这是我们许多人不得不求助的解决方案(几年前我不得不谷歌搜索解决方案,看到很多人需要这样做。一篇这样的文章)。这就是当 Availability Groups 出现时我非常兴奋地摆脱复制的原因之一。
确保您也为这种情况添加一些监控,这样当您不得不求助于 sp_MSdistribution_cleanup 的手动运行时,它不会落后太多。
| 归档时间: |
|
| 查看次数: |
1107 次 |
| 最近记录: |