【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】6.5.8
【复现路径】新集群TiDB写入性能压测
【遇到的问题:问题现象及影响】
新集群TiDB写入性能压测时,遇到某个tikv节点CPU会很高。
底表为a(bigint20),b(bigint20),c(datetime),d(bigint20),e(bigint20)的联合主键的聚簇索引,
按照c字段的分区表
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
tidb节点:24C/96G
tikv节点:32C/128G
【附件:截图/日志/监控】
tikv的cpu监控如下:
遇到热点了。
更换下主键吧,多主键哪个数据库都不太好用
请教下热点问题针对我这个设计下能有些缓解或者优化的手段吗
如果不更换主键的话,能否有些优化或者缓解的手段
如果没有其他的dml,只有写操作。那首先肯定是出现热点了,因为其他节点都低。
是不是先把分区去掉,再测试下?看看到底是主键原因,还是主键+分区造成的?
主键用auto_random试试
有写入热点
如果不更换主键的话,能否有些优化或者缓解的手段
tidb6.5 不适合用分区表 早起版本的分区表性能很差 等到8.1才成熟。
建议你建普通表 然后加autorandom
而且你分区表需要保证数据是按照分区打散的 不是很建议用分区
你的表应该是一个非聚簇吧,TiDB 会使用一个隐式的自增 RowID,大量 INSERT
时会把数据集中写入单个 Region,造成写入热点。
通过设置 [SHARD_ROW_ID_BITS可以把 RowID 打散写入多个不同的 Region,缓解写入热点问题。
具体可以参考: TiDB 热点问题处理 | PingCAP 文档中心
我的表是按主键的聚簇索引
改成非聚簇表然后打散试一下呢
把表结构贴出来
主键最好是随机的
把sql贴出来
明显感觉数据倾斜了
有单热点的问题没有打散
2个方法
1.聚簇表用auto_random做主键
2,主键不能改成auto_random,那就改成非聚簇表+shade_rowid_bits
https://docs.pingcap.com/zh/tidb/stable/troubleshoot-hot-spot-issues#使用-shard_row_id_bits-处理热点表
写入热点,聚簇索引表用auto_random,非聚簇索引表用shad-row-id-bits,参考文档打散处理https://docs.pingcap.com/zh/tidb/stable/troubleshoot-hot-spot-issues#tidb-热点问题处理
正常是产生热点了,可以通过下面的方式 确定是否存在热点问题:参考链接: TiDB 热点问题处理 | PingCAP 文档中心
- 判断写热点依据:打开监控面板 TiKV-Trouble-Shooting 中 Hot Write 面板,观察 Raftstore CPU 监控是否存在个别 TiKV 节点的指标明显高于其他节点的现象。
- 判断读热点依据:打开监控面板 TIKV-Details 中 Thread_CPU,查看 coprocessor cpu 有没有明显的某个 TiKV 特别高。
大数据量写入或者导入建议表结构设计时考虑设置随机主键