【TiDB 使用环境】生产环境
【TiDB 版本】8.5.2
【操作系统】 Rockylinux
【部署方式】物理机
【集群数据量】1T
【集群节点数】14
【问题复现路径】原6.5.3迁移数据至新8.5.2集群,迁移部分线上业务后出现
【遇到的问题:问题现象及影响】
目前kv读写缓慢,然后出现unified read pool cpu 被拉满,怀疑是大读热点,优化后效果不是很明显。
【资源配置}
如果确定是热点问题,可以通过 tidb中hot_region_history确定热点region,,table。或者热力图也行。 后续对表进行auto_random的打散
需要多提供点信息才能分析了,这些不够的
最好是有具体的场景,比如 xx Table,数据量多少,一共多少个region,结构是怎么样的,在流量图上有明显的热点,读写偏斜
可以分析下具体大SQL
Tikv的流量大吗? 看看哪些表流量特别大,手动分析下这这边看看效果。
学习了
如果业务没什么明显变化可以重点关注两个情况
1.看dashboard慢sql,是否有执行计划不对的地方
2.看analyze的情况,调整下analyze的时间,如果cpu立马下来,就是analyze的问题
找消耗资源大的SQL看下
最新的测试情况,升级之后很多原本应该走索引的语句 或者走tiflash的 直接走了kv导致,举个例子
where条件中外层带括号走 不走索引。没搞懂为啥
查询语句1
desc SELECT
VideoId
AS BookId
,
Language
AS BookLanguage
FROM
VideoInfo
WHERE
(VideoId
IN (‘15806446’));
查询语句2
desc SELECT
VideoId
AS BookId
,
Language
AS BookLanguage
FROM
VideoInfo
WHERE
VideoId
IN (‘15806446’);
表结构:
CREATE TABLE VideoInfo
(
Id
bigint NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */ COMMENT ‘主键ID’,
ProductId
int DEFAULT ‘0’ COMMENT ‘语言’,
VideoId
varchar(128) DEFAULT NULL COMMENT ‘Id=SeriesId’,
VideoName
varchar(256) DEFAULT NULL COMMENT ‘名称=SeriesName’,
PRIMARY KEY (Id
) /*T![clustered_index] CLUSTERED */,
UNIQUE KEY idx_ProductId_VideoId
(ProductId
,VideoId
),
KEY idx_videoId
(VideoId
),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
分析慢查询日志找出那些消耗大量资源的查询, 可以尝试调整readpool.unify-level
和相关参数来优化读操作的性能。
表和索引的统计信息都是最新的吗?
是的,统计信息都是最新,这个语句在6.5.3的时候 他就走索引。
加hint强制走索引呢?
数据库里大概有多少张表?看一下 grafana 监控 tidb->Statistics & Plan Management 下面的监控
再强制走tiflash试试,如果强制走,都正常。那我估计还是统计信息不是很准确
数据迁移怎么迁移的,迁移后有更新统计信息吗
统计信息没有 miss 的情况,感觉和统计信息可能没啥关系了
可以看一下强制走索引不生效的时候有没有什么 warning