TIDB6.5 在单线程下写入一条数据50ms,在多线程写入时平均每条需要400ms

TIDB6.5 在单线程下写入一条数据50ms,在多线程写入时平均每条需要400ms。有哪位大佬知道怎么优化?

怎么个写入法,表结构发一下,有写热点吗?


好奇怪的是多线程不知道为啥延迟这么多呢

id怎么生成的,自增吗?

image
使用的mybatisplus的雪花算法id。
image

dashboard的流量可视化界面看下有没有写热点,
image
这种的肯定是回到同一个region里面的

怎么让它写在不同的region呢?或者我怎么优化呢?

直接不要应用侧写这个字段了,改成auto_random让系统自动生成

修改雪花算法,按照量级来翻转高位的,这样才能满足region 打散的要求。

auto_random 的原理也是如此。
什么叫高位呢,解释一下:
1684830211003592709

靠左边的,就是高位了,auto_random(X) 有个参数位的设定,就是翻转高位的个数。
设定为 auto_random(5),则 [16848]30211003592709
[] 起来的数字,会被高位翻转,符合region 的处理要求,,并且还要支持不重复… :upside_down_face: :upside_down_face: :upside_down_face:

是不是有热点问题,在一个region上,用雪花算法, 不用自增试下

既然内存 cpu负载都很低,我觉得可能是硬盘性能问题,请检查下硬盘使用率是否到100%了

这个具体怎么改呢?求助

建新表的时候自增长的列,把关键字auto_increament改为auto_random就行了,其他保持不变。具体也可以搜一搜官网

CREATE TABLE ta (id BIGINT AUTO_INCREMENT , b VARCHAR(255), PRIMARY KEY (id));
SET tidb_allow_remove_auto_inc=1;
ALTER TABLE ta MODIFY COLUMN id BIGINT AUTO_RANDOM(5);


已经改了,还是插入慢,不知道什么原因,多线程写就慢

学习了

并发起了多少个?机器的io监控下呢,另外你15机器上的两台tikv是挂载在同一个磁盘下,还是不同的磁盘下?


并发了20个线程,tikv都是单独的目录磁盘

除了写入热点的消除,强烈建议刷一遍下面这个视频:

这个视频思路非常清晰:
先是通过 Average Idle Connection Duration可以判断是数据库内慢,还是数据库外慢。
然后可以通过数据库内sql的拆解,整个sql的执行可以拆解为 get token,execute, compile,parse。
高并发的时候没有plan cache ,compile阶段的占比会比较高。
然后引入如何使用plan cache。外加各种连接池如何设置参数。

非常实用。

我的数据库使用的机械磁盘,不是SSD