【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】7.5
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
一张表测试说插入不进去数据了,报主键冲突,插入主键用的默认自增值。经过检查,表中id最大id值122131,而自增值83853,出现了主键冲突。
问题是在什么情况下会出现这种情况,正常应该应该自增的值大于表中id最大值。
小于也正常,可能插入时指定了明确的大值。再就是自增值也是可修改的
插入时指定了明确的大值我测试没有影响,比如原来自增到100,插入明确的值1000,那么下次自增就是1001
表做过啥操作吗,恢复啥的
明确插入一个主键试试呢
估计是经过什么操作,比如 大批量插入后,数据库表还原,引起的什么bug。
不正常的,插入时指定大值,表auto_increment值默认会变成你这个大值+1的,另外auto_increment值确实可以改,但是能改大不能改小,防止的就是这个问题。。。。
应该是显式和隐式交叉插入自增列值的场景导致的吧?执行一次 alter table xx auto_increment = 0 能触发 tidbserver 重新加载 id。
再就是检查 一下PD,它是维护全局自增的。
tidb里面alter table xx auto_increment = 0这个命令没啥用
重启过吗?我记得MySQL重启之后有影响,不会使用之前的自增ID值,而是使用最大ID+1
,因为自增ID值是存在内存中,重启后需要重新计算!tidb的不知道有没有影响
没重启过,理论上重启了就正常了
看下最大值的来源。
自增值是83854,当前表数据最大值122131,然后手工插入122132进去成功了,然后再测试不指定主键的插入,这次插入成功了,自增值正确的被设置为最大值+1
1 个赞
再操作还这样?关注…
虽然不知道为啥会出现这个问题,但是知道怎么解决了,也还不错
不知道这个bug怎么出来的,要是生产上遇到就头大了
有没有做个表分析试一下
没有,理论上没影响吧