新表做了热点打散,但是leader region还是集中在一个节点。无法避免热点问题。

【TiDB 版本】 V5.4

【概述】 新表做了热点打散,但是leader region还是集中在一个节点。无法避免热点问题。

该表数据是消费MQ信息写入的,insert、update、select都比较频繁。为了避免热点问题,手动设置SHARD_ROW_ID_BITS、PRE_SPLIT_REGIONS参数,做了打散,但是建好表后,查看leader region分布不均匀。全部在一个节点上。

【背景】 做过哪些操作

重新建表,加了SHARD_ROW_ID_BITS = 4,PRE_SPLIT_REGIONS = 4。

【现象】 业务和数据库现象
leader region全部分配到store id为5的节点。导致该节点CPU飙高

SELECT
    p.STORE_ID,
    COUNT(s.REGION_ID) PEER_COUNT
FROM
    INFORMATION_SCHEMA.TIKV_REGION_STATUS s
    JOIN INFORMATION_SCHEMA.TIKV_REGION_PEERS p ON s.REGION_ID = p.REGION_ID
WHERE
    TABLE_NAME = 'XXX'
    AND p.is_leader = 1
GROUP BY
    p.STORE_ID
ORDER BY
    PEER_COUNT DESC;

image

有什么方法可以避免leader都在一个节点吗?

1.每一个tikv的节点资源是一样的吗,比如存储空间
2.看下每个tikv的打分情况

最快的解决办法就是查看相关表的慢sql,看看过滤条件的过滤性高不高,高的话加上索引,减少全表扫描,可以马上看到效果。
如果加索引不能解决,可以看看 Follower Read

参考一下官方文档的排查步骤:https://docs.pingcap.com/zh/tidb/stable/pd-scheduling-best-practices#leaderregion-分布不均衡

1、建表前设置 tidb_scatter_region =on 就会把预切分的region 均分到所有节点。也可以pd-ctl scheduler add scatter xxx方式添加均衡调度 ,调度后最好删了 。
2、 pd-ctl operator add transfer-leader手动调度leader到其他节点

show create table XXXX,发出来看看,该表的相关sql也看看

还有region相关的grafana截图等等

表有主键吗?主键字段类型是什么?

CREATE TABLE `XXX` (
  `ID` VARCHAR(200) NOT NULL COMMENT 'ID',
  `VEHICLE_NO` VARCHAR(50) DEFAULT NULL COMMENT '',
  `WAYBILL_NO` VARCHAR(50) NOT NULL COMMENT '运单号',
  ....
  `DEP_NODE_THREE` INT(10) DEFAULT NULL COMMENT '出发节点3',
  `DEP_NODE_FOUR` INT(10) DEFAULT NULL COMMENT '出发节点4',
  `DEP_NODE_FIVE` INT(10) DEFAULT NULL COMMENT '出发节点5',
  `TKHK_TICKS` INT(10) DEFAULT NULL COMMENT '特快xx票数',
  `EXP_TICKS` INT(10) DEFAULT NULL COMMENT 'x',
  `ACTIVE` CHAR(1) DEFAULT NULL COMMENT '是否有效',
  `CREATE_TIME` DATETIME(6) DEFAULT NULL COMMENT '创建时间',
  `PARTITION_DATE` DATE NOT NULL COMMENT '分区日期',
  `SHARDING_ITEM` INT(10) DEFAULT NULL COMMENT '分片项',
  PRIMARY KEY (`ID`) /*T![clustered_index] NONCLUSTERED */,
  KEY `IDX_UPII_WAYBILL_NO` (`WAYBILL_NO`),
  KEY `IDX_UPII_CREATE_TIME` (`CREATE_TIME`),
  KEY `IDX_ITEM_TIME` (`SHARDING_ITEM`,`CREATE_TIME`),
  KEY `IDX_UPII_GROUP_BY_COMPOSITE` (`VEHICLE_NO`,`ARRIVE_ORG_CODE`,`CONSUMER_TAG`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='xxx' SHARD_ROW_ID_BITS = 4,PRE_SPLIT_REGIONS = 4;

ID VARCHAR(200) NOT NULL COMMENT ‘ID’


热点写region分布一直不均匀。

写的leader分布不均,读的leader分布很均匀,说明store 5写入量很大,region一直store 5分裂,然后再被调度到其他store

你怎么确定的就是这个表相关的leader呢?我猜测可能是其他的表或者索引

dashboard的热力图拿出来,就知道是哪个表了

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。