tencent cloud

文档反馈

数据一致性校验技术方案解析及常见问题

最后更新时间:2024-05-07 17:57:42
    数据一致性校验,即 DTS 对数据迁移的源库和目标库的表数据进行对比,并给出对比结果和不一致详情,方便用户稳定可靠地进行业务的割接。

    校验方案

    DTS 校验对比数据包含全量迁移的数据及其迁移过程中源端又新增的增量迁移数据。全量数据校验逐行对比源端与目的端的数据,增量数据校验线程一旦发现全量数据对比完成,立即进入增量数据校验阶段,获取全量校验开始时的时间戳(对比增量数据,需从全量开始的时间点对应的快照数据开始对比),循环获取源端增量的操作日志 Oplog,对比源端和目的端差异。当目的端与源端数据对比落后小于10s后结束对比,输出校验结果。
    

    常见问题

    全量校验任务进度慢,耗时久

    原因分析

    云数据库 MongoDB DTS 一致性校验策略针对全量数据逐条对比,若校验对比的数据量较大时,校验任务持续时间可能非常长;同时校验任务进行期间会持续占用系统资源,可能对源端业务和迁移任务造成影响。

    解决方法

    针对数据量比较大,校验任务长期无法结束的情况,建议停止当前任务,重新手动创建一致性校验任务,数据校验方式选择行数校验进行快速对比;或者数据校验方式选择内容校验,同时降低抽样对比选择的比例,即抽取相对低比例的数据进行校验,提高校验效率。具体操作,请参见 创建数据一致性校验任务
    数据校验
    行数校验:对比源库和目标库的数据行数。
    内容校验:逐条对比源库和目标库的数据内容。
    抽样对比:选择内容校验时,支持抽取一定比例的数据进行对比。
    

    数据对比不一致

    数据内容不一致

    问题现象
    
    原因分析 全量数据校验过程中,源端数据持续写入,Oplog 不断产生,增量数据校验任务持续从源端读取 Oplog,若源端新产生的 Oplog 还没到达目的端的时间戳内,可能会存在短暂的数据内容对比不一致现象,此时属于正常情况。
    解决方法 针对校验不一致的内容逐条进行判断,也可发起新校验任务,手动进行二次校验,当目标端追平增量时,该不一致内容将不再存在。

    数据行数不一致

    问题现象
    
    原因一 全量数据校验过程中,源端数据持续写入,Oplog 不断产生,增量数据校验任务持续从源端读取 Oplog,若源端新产生的 Oplog 还没到达目的端的时间戳内,同样可能引起短暂的数据行数校验不一致现象,此时属于正常现象。
    原因二 云数据库 MongoDB 行数校验是通过 db.collection.estimatedDocumentCount() 或 db.collection.stats() 采集元数据中的行数进行对比,其在特定情况下可能和实际行数有出入:如预期外的实例停机,或者孤儿文档都会造成不一致。
    解决方法 此时,您可以使用 db.collection.countDocuments() 进行精准的行数比较。但需注意此方法会扫描集合,有一定性能风险。更多信息,请参见 db.collection.countDocuments()

    索引校验

    问题描述 创建一致性校验任务时,若数据库信息选择了索引,即对比源端与目的端的索引。如果您发现源端与目的端存在 “v” 字段与 “background” 字段内容存在差异,而校验结果并没有提示不一致的信息。
    原因说明 云数据库 MongoDB 索引校验策略是忽略版本信息:“v” 字段的和后台创建:“background” 字段的内容差异,将不会在校验结果中显示该不一致的信息。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持