文档中心>云数据库 PostgreSQL

创建数据一致性校验

最近更新时间:2024-10-11 15:49:31

我的收藏

操作场景

数据一致性校验,即 DTS 对数据迁移的源库和目标库的表数据进行对比,并给出对比结果和不一致详情,辅助用户在割切前快速验证同步结果。数据一致性校验任务是独立进行的,不会影响源数据库的正常业务,也不会影响 DTS 的任务。
说明:
一致性校验仅作为辅助的数据验证手段。在正式割接前,请用户自行进行演练操作以确保结果满足割接要求。
当前支持数据一致性校验的链路如下:
PostgreSQL > PostgreSQL

注意事项及约束

1. 数据一致性校验任务可能会增加源数据库实例的负载,因此请在业务低峰期进行操作。
2. 当前只有迁移类型为全量迁移 + 增量迁移时支持数据一致性校验。
3. 抽样对比需要校验的表必须具有主键或唯一键,否则将跳过不进行校验,行数校验不要求有主键或者唯一键, 如果表格没有主键或唯一键且数据超过1万条则不能进行完整对比。
4. 如果在数据一致性校验任务还未结束时,用户选择完成或者终止 DTS 任务,则数据一致性校验任务会失败。

创建数据一致性校验任务

说明:
单独创建数据校验任务只支持独立校验,不支持内置校验。
独立校验独立于 DTS 任务外,选择源端和目标端相同的数据块进行对比。DTS 任务停止运行后,不支持发起校验。
只有在任务运行中,且为增量同步阶段才能发起独立校验任务。任务已完成无法发起校验任务。您可以基于交割的不同阶段,分批次和不同的校验方法多次发起校验任务。
1. 登录 DTS 控制台,在左侧导航选择数据迁移页,在任务列表的操作列单击查看,或者直接点击任务 ID 进行任务详情。
2. 点击数据一致性校验,进入数据一致性校验的任务列表,单击创建数据一致性校验,新建数据校验任务。


配置校验任务详情,具体如下:
参数
说明
任务类型
独立校验:校验服务独立于 DTS 任务外,可对比迁移对象外的其他数据。
结构校验
校验源端和目标端的数据对象结构,如您已经确认结构一致,则关闭结构校验更节省时间。
校验对象
全部迁移对象:校验范围为迁移任务勾选的全部对象。
自定义选择:在勾选的迁移对象中,选择进行校验的对象。
校验对比类型
完整对比:对所选检验对象的完整数据进行校验。
抽样对比:对所选检验对象抽选一定的比例进行校验,抽样比例支持10%,20%,30%……90%。
行数对比:对所选校验对象,仅对比数据行数。选择行数对比时,不要求表对象有主键,无主键表也可以进行校验。
线程数选择
设置范围为1~8,请根据实际情况选择,提高线程数可加快一致性校验速度,但也会增加源和目标库的负载。每提升一个线程数,约增加消耗一个 CPU 的占用。
3. 配置完毕后点击创建并启动一致性校验,则发起校验任务。

查看数据一致性校验结果

说明:
当校验任务中首次校验出不一致的表时,系统会将任务对比结论标记为不一致,并将任务状态标记为失败。
1. 在迁移任务首页,最后一次校验结果列,可查看校验结果,一致或者不一致,单击查看更多进入校验详情页。


2. 单击查看,即可查看校验结果。


数据校验结果汇总

数据校验结果的汇总信息如下表所示:
项目
详情
概要
对比类型:当前全部为独立校验。
对比方式:可选方式为完整对比、抽样对比和行数校验。
结构校验:可选方式为已开启或者未开启。
状态:当前校验任务的状态,为创建完成、等待运行、运行中或者已完成。
对比结论:当前校验任务的运行结果,为不一致或者一致。
线程数:当前任务配置的线程数。
预估表总数目
系统预计的需要校验的所有的表的总数。
已检测表数量
任务当前已经完成检测的表的数量。
不一致表数量
已经完成检测的表中,源和目标端不一致的表的数量。具体的不一致表,可以到不一致详情查看。
不一致分块数
已经完成检测的表中,源和目标端不一致的表的分块的数量。系统校验时在源端和目标端采用分块的方式进行校验,10000行数据为一个块。

数据校验结果详情

PostgreSQL 的数据校验任务在校验任务中会展示如下几种不一致,下面为您一一介绍:
不一致详情
此部分会详细的展示在当前已经完成校验的表中,不一致的分块详情。您可以通过点击详情列表的操作列的查看,来定位具体的数据。具体如下图所示:


表结构不一致详情
只有开启了结构校验的任务,才会展示结构不一致详情。在进行结构校验时,系统会列出已经校验过的所有不一致的表结构的详情,具体如下图所示:



您可以通过点击列表中结构字段的详情,来查看结构不一致的详细 SQL,具体如下图所示:

OWNER 不一致详情
数据校验任务会列出已经校验的所有表格中,OWNER 不一致的表详情,具体如下图所示:

未检查表详情
数据校验任务会列出未校验的所有的表格详情。

实现原理

行数对比:校验源表和目标表行数量是否一致
抽样对比:
无主键或者唯一索引的表无法进行抽样对比,系统直接跳过。
其他表格会先比较源和目标的行数是否一致,不一致则判定为不一致,系统跳过这些表格进行其他表格校验。
在表格的行数一致时,系统会根据抽样比例,将一个表格分为多个块,每个块内随机选择一些行数据,分别计算源和目标的 MD5值进行比较,MD5一样的代表一致。
完整对比:
对于无主键或者唯一索引的表:
如果表格超过1万行,则系统不进行数据一致性校验。
如果没有超过1万行,则系统会对所有列排序后获取表格所有数据,分别计算源和目标的 MD5,MD5一样的代表一致。