读热点为什么在一个tikv节点上,没有均摊到其他tikv节点上去

【 TiDB 使用环境】生产环境
【 TiDB 版本】 4.0.10
业务在对某张大表做数据迁移的时候,做的操作如下:
1. 查询A表某个时间段内的数据,limit 500,写到其他数据库中去。
2. 删除TiDB中刚才的500行记录。

每次执行时间+停顿时间大约2秒左右,该表会产生大量的读热点,从监控上看,5个tikv节点中的某一个节点cpu会持续升高,其他4个节点并无明显变化,持续迁移几千万数据都这个样子。按理说某个表的数据leader不可能全部落在一个节点上吧。


和region 的设定有关系,这个设定又和表结构有关,建议你去看下聚簇索引和非聚簇索引

https://docs.pingcap.com/zh/tidb/stable/dm-best-practices#是否使用聚簇索引

适应什么样的场景,都需要提前规划好

可以查询表对应的region是什么。你去看看。
https://docs.pingcap.com/zh/tidb/stable/sql-statement-show-table-regions#show-table-regions

SELECT b.DB_NAME,b.TABLE_NAME,b.INDEX_NAME,c.STORE_ID,a.ADDRESS,COUNT(b.REGION_ID) FROM INFORMATION_SCHEMA.TIKV_STORE_STATUS a ,INFORMATION_SCHEMA.TIKV_REGION_STATUS b,INFORMATION_SCHEMA.TIKV_REGION_PEERS c
WHERE a.STORE_ID=c.STORE_ID
AND b.REGION_ID=c.REGION_ID
AND c.IS_LEADER=‘1’
AND b.DB_NAME=‘sbtest’
AND b.TABLE_NAME=‘sbtest2’
GROUP BY b.DB_NAME,b.TABLE_NAME,b.INDEX_NAME,c.STORE_ID,a.ADDRESS
ORDER BY 1,2,3,4;
用这个sql查一下也行。


从表结构上看,应该是聚簇索引,聚簇索引会导致一个表的leader都在一个kv节点上吗

要解决问题的话,可以看看这个表相关的sql的执行计划,看看是不是有调优空间。

给你发了文档,好好看看就知道怎么解决了

怎么个删除法?WHERE有索引没?

非常感谢

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