一、问题现象:
查询某个表数据时出现这个问题
errCode = 2, detailMessage =(xx.xxx.x.xxx) [CANCELLED]Bad page: checksum mismatch (actual=1685103671 vs expect=2746936888), file=/opt/doris/be/storage/data/617/38307643/87428600/0200000000a2cdf4eb4352137a558f9adcab3bc1c412cd86_0.dat

二、问题原因
Doris集群部分节点磁盘损坏,导致查询表数据异常,后续重新缩容扩容更换磁盘查询依旧异常。
三、解决方案
1.全局状态检查
在数据库工具(例如DBeaver执行)
show proc '/cluster_health/tablet_health';

注:全局检查查询为正常,TabletNum 和 HealthNum 数据量相等。相等为正常;
2.查看具体tablet信息
1.查看有问题的tablet详细信息
SHOW TABLET 38307643


获取到关键信息:
tableName: t_data_表名称
PartitionName: p20250918
DetailCmd: SHOW PROC '/dbs/32735632/32735981/partitions/38307638/32735982/38307643';
2.执行DetailCmd的语句
SHOW PROC '/dbs/32735632/32735981/partitions/38307638/32735982/38307643';

获取到关键信息:
BackendId: 17142219
Version: 43808
LstFailedVersion: -1
IsBad: false
CompactionStatus: http://53.240.1.158:8040/api/compaction/show?tablet_id=38307643
3.确认是否自动修复
由于doris内部会自动做数据均衡和修复,所以当出现数据副本异常时,先确认异常数据副本能否自动修复:
如果是多副本,查看是否存在健康副本。健康副本是指副本version >= special_version && last_failed_version = -1 && isBad = false, 且curl 它的 compact_status, missing_rowsets 为空
3.查看有问题分区副本数量(副本数大于3才能使用命令尝试修复数据)
SHOW PARTITIONS FROM table(表名)

注:ReplicationNum为副本数大于3才能进行标记分区为bad进行修复;
4.调用Doris自动修复机制标记数据异常分区为bad,进行自动修复
ADMIN SET REPLICA STATUS PROPERTIES( "tablet_id" = "38307643", "backend_id" = "17142219", "status" = "bad" );
-- backend_id与tablet_id取值为执行DetailCmd的语句 查询后结果中的backendid与tabletid
注:执行成功后等1~2分钟再次执行DetailCmd的语句查询backendid数值查询与其他副本相差不大;
5.自动修复结果验证
SHOW PROC '/dbs/32735632/32735981/partitions/38307638/32735982/38307643';

注:再次查询有报错的表数据,查看是否查询正常,如果有异常查看哪个节点副本数据有异常,执行自动修复再次修复,修复后再次验证结果,查询表数据看结果是否正常返回;
969



被折叠的 条评论
为什么被折叠?



