背景
命令
SHOW PROC '/cluster_health/tablet_health'
如下图示:
显示集群中存在不健康的数据副本。
查看某个库的情况
-- 查看DbId为11490的数据库的异常副本。
SHOW PROC '/cluster_health/tablet_health/11490'
结果
如下图示:
【ReplicaMissingTablets】【ReplicaMissingForTagTablets】【OversizeTablets】这三个字段列举了有若干个tabletId。
ReplicaMissingTablets: 5个。
ReplicaMissingForTagTablets: 213个。
OversizeTablets: 2250个。
【ReplicaMissingTablets】的情况
命令
SHOW TABLET 16375869;
结果
定位到tablet所在的库和表。
tablet块详情
SHOW PROC '/dbs/11490/9149487/partitions/16375868/9149488/16375869';
结果
可知有两个副本块, 所以我大概理解了【ReplicaMissingTablets】是什么意思, 表设置是3副本,实际这些tablet块是两个副本, 就是副本缺失。
意料之外
select * from ads_ths_ip_orgcode_detail
这个表是没有数据的, 没有数据怎么还会有【缺失副本】的情况,而且Doris还没有自动修复这【副本缺失】的状态。
【ReplicaMissingForTagTablets】的情况。
命令
SHOW TABLET 25345933;
结果
定位到tablet块所在的表。
TABLET块详情
SHOW PROC '/dbs/11490/9149487/partitions/16375868/9149488/16375869';
结果
发现确实为3个副本, 但分布的服务器分组group tag和表定义ddl不符。 因此,【ReplicaMissingForTagTablets】大概是在一个group tab内副本不符合要求。
同样的意料之外
查询对应的表
select * from ads_ths_ip_orgcodecount_agg
发现表是空的。 同样的问题, 空的表怎么会有不健康的数据块?
【OversizeTablets】的情况
通过show 查看发现【OversizeTablets】没有什么异常的地方。
且
(TabletNum 63521)-(HealthyNum 63303)
(ReplicaMissingTablets 5) + (ReplicaMissingForTagTablets 213)
= 218
即【OversizeTablets】列举的tablet块没有算到【不健康tablet】。
只需要了解【OversizeTablets】的具体含义即可
最终总结
1: 表数据为空的情况下, 为什么会出现【ReplicaMissingTablets】【ReplicaMissingForTagTablets】异常的tablet块。
2: 【ReplicaMissingTablets】【ReplicaMissingForTagTablets】【OversizeTablets】具体含义要明确下。
3: 该文档基本做到了如何找出异常的tablets和对应的库表。 但目前需要可以修复的命令。 单个tablet块修复的命令需要有, 因磁盘损坏造成的大批量的tablet损坏也需要有命令。
4: tablet管理是否系统内置的传统型关系型数据表来管理。这样可以用普通的sql实现归因分析,比如损坏的tablet块是否集中在某块盘上。 类似于审计日志,查询这张表和普通的业务表一样。