读取tidb时有一个tikv节点负载不均衡

【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.4.2
【遇到的问题】查询时,有一个tikv节点cpu超高

用jdbc方式或者数据库工具,查询同样的sql,看看相同的tikv节点cpu高不高,猜测一下,估计是有数据读热点存在

是的黑总,直接走tidb层查询也是相同现象。
参考了这个帖子

BlockCache 命中率比较稳定。

先分析SQL 执行计划走的不好的 少量数据范围且大量查询的 ,再看看hot region可以用pd-ctl或Information-schema.tikv_hot_region

sql语句很简单,只是一个过滤然后聚合而已。

查询hot region:


查到的hot region并不大,key也不多

sql、表结构发下看看,集中在少量的数据范围的话,可能得需要手动分裂 或更改表结构

select yw_distinct as article_id,if(yw_Origin='NSTL_QK','WF_QK',yw_Origin) as source_db,f_year,count(1) from yw.cite_literature where yw_Origin is not null and yw_Origin !='' group by yw_distinct,yw_Origin,f_year limit 20

表结构:

CREATE TABLE `cite_literature` (
  `f_id` int(11) NOT NULL ,
  `f_pk` varchar(255) DEFAULT NULL ,
  `f_qcode` varchar(255) DEFAULT NULL ,
  `f_serialnum` int(11) DEFAULT NULL ,
  `yw_distinct` varchar(255) DEFAULT NULL ,
  `yw_CitingQCode` varchar(255) DEFAULT NULL ,
  `yw_Origin` varchar(20) DEFAULT NULL ,
  `yw_doi` varchar(255) DEFAULT NULL ,
  `yw_SerialNum` int(11) DEFAULT NULL ,
  `yw_title` varchar(255) DEFAULT NULL,
  `yw_author` varchar(255) DEFAULT NULL ,
  `yw_author1` varchar(255) DEFAULT NULL ,
  `yw_LiterType` varchar(10) DEFAULT NULL ,
  `yw_Publisher` varchar(255) DEFAULT NULL,
  `yw_PeriCode` varchar(50) DEFAULT NULL,
  `yw_year` varchar(10) DEFAULT NULL ,
  `yw_issue` varchar(50) DEFAULT NULL ,
  `yw_Volumn` varchar(50) DEFAULT NULL,
  `yw_page` varchar(255) DEFAULT NULL ,
  `yw_url` varchar(255) DEFAULT NULL,
  `yw_FileDir` varchar(255) DEFAULT NULL ,
  `yw_degree` varchar(50) DEFAULT NULL,
  `yw_tutor` varchar(255) DEFAULT NULL ,
  `yw_ServiceMode` int(11) DEFAULT NULL ,
  `yw_WFPublishDate` datetime DEFAULT NULL ,
  `yw_WFFulltextAvailableDate` datetime DEFAULT NULL,
  `yw_HasOriginalDoc` int(11) DEFAULT NULL ,
  `f_adddate` date DEFAULT NULL ,
  `f_fulltitle` varchar(255) DEFAULT NULL ,
  `f_author` varchar(255) DEFAULT NULL,
  `F_PeriCode` varchar(40) DEFAULT NULL ,
  `f_periname` varchar(255) DEFAULT NULL ,
  `f_year` varchar(10) DEFAULT NULL ,
  `f_issue` varchar(20) DEFAULT NULL ,
  `f_url` varchar(255) DEFAULT NULL ,
  `F_FileDir` varchar(255) DEFAULT NULL ,
  `lw_ServiceMode` int(11) DEFAULT NULL ,
  `lw_WFPublishDate` datetime DEFAULT NULL ,
  `lw_WFFulltextAvailableDate` datetime DEFAULT NULL ,
  `lw_HasOriginalDoc` int(11) NOT NULL ,
  `lw_doi` varchar(255) DEFAULT NULL ,
  `yw_datasource` varchar(50) DEFAULT NULL ,
  `yw_etc` varchar(10) DEFAULT NULL,
  `是否本刊自引` int(11) NOT NULL,
  `是否作者自引` int(11) DEFAULT NULL,
  `BatchID` int(11) DEFAULT NULL,
  `f_tutor` varchar(255) DEFAULT NULL,
  `f_degree` varchar(10) DEFAULT NULL,
  `f_Volumn` varchar(40) DEFAULT NULL,
  `F_origin` varchar(10) DEFAULT NULL,
  `yw_Version` varchar(50) DEFAULT NULL ,
  `yw_PubPlace` varchar(255) DEFAULT NULL ,
  `yw_PubDate` varchar(50) DEFAULT NULL ,
  `yw_StandardState` varchar(10) DEFAULT NULL ,
  `yw_NoticeNumber` varchar(255) DEFAULT NULL ,
  `yw_NoticeDate` varchar(20) DEFAULT NULL ,
  `yw_PatentOrga` varchar(255) DEFAULT NULL ,
  `yw_PatentType` varchar(20) DEFAULT NULL ,
  `primary_partition` int(4) GENERATED ALWAYS AS ((crc32(`f_pk`)) % 9999) STORED NOT NULL,
  `last_modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `spark_update_time` datetime DEFAULT NULL,
  UNIQUE KEY `idx_f_pk` (`f_pk`),
  KEY `idx_f_qcode` (`f_qcode`),
  KEY `idx_yw_distinct` (`yw_distinct`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

全表扫描,可以试试
1、 给这个表添加scatter 调度,pd-ctl 操作,让系统自动把regiion均匀分布到所有tikv
2、 手动转移该表的leader到其他tikv,pd-ctl operator add…

更多热点问题可以参考:https://tidb.net/blog/d12ac00d

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