Azure SQL Data Sync同步停滞求助:单表千万级数据卡住超2天
处理Azure SQL Data Sync单表同步停滞的方案
检查同步日志与数据库错误
- 登录Azure门户,进入目标同步组的同步历史记录,筛选涉事表的日志,排查是否存在主键冲突、超时、权限不足等明确报错
- 在源库和目标库执行以下查询,提取近3天的错误日志,定位Data Sync相关的异常:
SELECT * FROM sys.event_log WHERE event_type = 'error' AND start_time > DATEADD(day, -3, GETDATE())
排查表级阻塞与锁等待
- 在源库和目标库分别执行,查看涉事表的锁占用情况:
SELECT * FROM sys.dm_tran_locks WHERE resource_type = 'OBJECT' AND resource_associated_entity_id = OBJECT_ID('你的表名') - 查询当前数据库的运行会话,识别长时间等待的进程(如
PAGEIOLATCH_*、LCK_M_*类型等待):SELECT session_id, status, command, wait_type, wait_time FROM sys.dm_exec_requests WHERE database_id = DB_ID('你的数据库名')
- 在源库和目标库分别执行,查看涉事表的锁占用情况:
验证数据一致性与缺失范围
- 统计源表与目标表的记录数,确认实际差异:
-- 源库执行 SELECT COUNT(*) AS 源表记录数 FROM 源表名; -- 目标库执行 SELECT COUNT(*) AS 目标表记录数 FROM 目标表名; - 若存在差异,按主键分段查询定位缺失区间,例如:
-- 源库分段统计 SELECT id_range = CONVERT(VARCHAR(20), FLOOR(id/100000)*100000) + '-' + CONVERT(VARCHAR(20), FLOOR(id/100000)*100000+99999), COUNT(*) AS 数量 FROM 源表名 GROUP BY FLOOR(id/100000) ORDER BY id_range; -- 目标库执行相同语句对比
- 统计源表与目标表的记录数,确认实际差异:
重置涉事表的同步配置
- 暂停当前同步组,进入表映射设置,移除涉事表的同步规则并保存
- 重新添加该表的同步配置,选择仅同步增量数据(若目标表已有大部分有效数据);若数据差异无法明确,可选择重新初始化该表(注意会覆盖目标表现有数据,操作前需备份)
优化大表同步性能
- 确保源表和目标表的主键、同步筛选列上存在有效索引,避免同步时全表扫描
- 临时调增目标数据库的计算资源(DTU/VCore),待同步完成后再降回原规格
- 调整同步组的同步间隔,延长至15-30分钟,减少高频同步带来的资源竞争
强制终止并重启停滞作业
- 进入源SQL Server的作业面板,找到名称包含
Sync_<同步组ID>的Data Sync作业 - 查看作业历史,终止处于停滞状态的作业步骤,随后重启同步组
- 进入源SQL Server的作业面板,找到名称包含
内容的提问来源于stack exchange,提问作者sanheialan
相关产品推荐
相关产品推荐

