SQL Server中sys.sp_MSmakegeneration存储过程作用及重复调用原因咨询
sys.sp_MSmakegeneration 功能与订阅端重复调用原因分析
一、存储过程核心功能
sys.sp_MSmakegeneration是SQL Server合并复制架构中的核心系统存储过程,主要负责生成和管理合并复制的“生成号(Generation)”——这是合并复制中用于批量追踪、组织同步变更的关键标识,具体功能包括:
- 生成新的唯一生成号(对应代码中
@gen变量),标记订阅端待同步的一批变更数据; - 管理生成号的状态(如打开、关闭、临时关闭等,从注释的状态常量可推断),确保变更批次的生命周期可控;
- 验证传入的通用生成号(
@commongen、@commongenguid)有效性,将验证结果输出到@commongenvalid参数; - 统计订阅端变更计数,判断是否需要生成新的生成号记录(由
@makenewrow变量控制); - 清理或关闭旧的生成历史记录,避免系统表数据冗余;
- 与合并复制其他组件协作,确保订阅端变更能被正确分批,供合并代理同步到发布端。
二、订阅端重复调用的常见原因
订阅端频繁触发该存储过程,通常和合并复制的同步机制、业务场景直接相关:
- 合并代理周期性同步:如果订阅端配置了固定间隔(如每5分钟)运行合并代理,每次同步启动时,都会调用该存储过程生成新的生成号,封装本次周期内的变更;
- 连续同步模式:若合并代理设置为连续运行(
-Continuous参数),订阅端产生新变更时,代理会自动触发同步,每次同步都需要调用该存储过程生成新的变更批次; - 大量变更分批处理:当订阅端短时间内产生大量数据变更时,合并复制会将拆分为多个批次,每个批次对应一次生成号创建,因此会多次调用该存储过程;
- 同步重试机制:如果某次同步因网络波动、锁冲突等失败,合并代理会自动重试,重试过程中会再次调用该存储过程生成新的生成号;
- 自动校平操作:当订阅端与发布端出现数据差异需要自动校平时,也会触发该存储过程生成专用生成号处理校平数据。
内容的提问来源于stack exchange,提问作者porya ras
相关产品推荐
相关产品推荐

