出现自增值小于表中数据最大值问题

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】7.5
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
一张表测试说插入不进去数据了,报主键冲突,插入主键用的默认自增值。经过检查,表中id最大id值122131,而自增值83853,出现了主键冲突。
问题是在什么情况下会出现这种情况,正常应该应该自增的值大于表中id最大值。


image

小于也正常,可能插入时指定了明确的大值。再就是自增值也是可修改的

插入时指定了明确的大值我测试没有影响,比如原来自增到100,插入明确的值1000,那么下次自增就是1001

表做过啥操作吗,恢复啥的

明确插入一个主键试试呢

估计是经过什么操作,比如 大批量插入后,数据库表还原,引起的什么bug。

不正常的,插入时指定大值,表auto_increment值默认会变成你这个大值+1的,另外auto_increment值确实可以改,但是能改大不能改小,防止的就是这个问题。。。。

应该是显式和隐式交叉插入自增列值的场景导致的吧?执行一次 alter table xx auto_increment = 0 能触发 tidbserver 重新加载 id。

再就是检查 一下PD,它是维护全局自增的。

自增是tidb server自己维护得吧,我这里用的auto_id_cache=1

tidb里面alter table xx auto_increment = 0这个命令没啥用

重启过吗?我记得MySQL重启之后有影响,不会使用之前的自增ID值,而是使用最大ID+1 ,因为自增ID值是存在内存中,重启后需要重新计算!tidb的不知道有没有影响

没重启过,理论上重启了就正常了

看下最大值的来源。

自增值是83854,当前表数据最大值122131,然后手工插入122132进去成功了,然后再测试不指定主键的插入,这次插入成功了,自增值正确的被设置为最大值+1

1 个赞

再操作还这样?关注…

虽然不知道为啥会出现这个问题,但是知道怎么解决了,也还不错 :grin:

不知道这个bug怎么出来的,要是生产上遇到就头大了

有没有做个表分析试一下

没有,理论上没影响吧