TiDB 数据一致性校验实现:Sync-diff-inspector 优化方案

Sync-diff-inspector 2.0:优化数据一致性校验与性能提升
本文介绍了Sync-diff-inspector 2.0升级版在解决原有版本问题(如内存溢出、浮点数校验、结果展示和GC影响)上的关键改进,包括异步chunk划分、checkpoint优化、自适应chunkSize和索引策略,显著提升了性能和资源利用。

简介

在数据同步的场景下,上下游数据的一致性校验是非常重要的一个环节,缺少数据校验,可能会对商业决策产生非常负面的影响。。Sync-diff-inspector 是 Data Platform 团队开发的一款一致性校验工具,它能对多种数据同步场景的上下游数据进行一致性校验,如多数据源到单一目的(mysql 中分库分表到 TiDB 中)、单一源到单一目的( TiDB 表 到 TiDB 表)等,在数据校验过程中,其效率和正确性是至关重要的。首先我们看下 Sync-diff-inspector 的架构图,对 Sync-diff-inspector 的作用和实现原理有一个大致的认知。

在这里插入图片描述

Sync-diff-inspector 2.0 架构图

Why Sync-diff-inspector 2.0?

在 1.0 版本中,我们遇到客户反馈的一些问题,包括:

  • 针对大表进行一致性校验时出现 TiDB 端发生内存溢出。
  • 不支持 Float 类型数据校验的问题。
  • 结果输出对用户不友好,需要对校验结果进行精简。
  • 检验过程中发生 GC,导致校验失败。

造成以上问题的原因与原版的实现方式有关

  • 采用单线程划分 Chunk,该表中所有已被划分的 Chunk 需要等待该表中所有 Chunk 全部被划分才会开始进行比对,这会导致这段时间内,TiKV 的使用率降低
  • Checkpoint 功能将校验过的每个 Chunk 的状态写入数据库,所以写入数据库的 IO 成为校验过程的瓶颈。
  • 当 chunk 范围内的 checksum 不同时,直接进行按行比对,消耗大量 IO 资源。
  • 缺少自适应 GC 的功能,导致正在校验的 Snapshot 被 GC,使得校验失败。

Sync-diff-inspector 2.0 新特性

Chunk 划分

对于比较两个表数据是否相同,可以通过分别计算两个表的 checksum 来判断,但是确定哪一行出现了不同则需要逐行比对。为了缩小 checksum 不一致时需要进行逐行比对的行数, Sync-diff-inspector 采用了折衷的方案:将表按照索引的顺序划分成若干块(chunk),再对每个 chunk 进行上下游数据比对。

chunk 的划分沿用了之前的方法。TiDB 统计信息会以索引作为范围将表划分为若干个桶,再对这些桶根据 chunk 的大小进行合并或切分。切分过程则选择随机行作为范围。

原版 Sync-diff-inspector

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值