【关于系统变量 global重连未生效的情况】做实验的时候遇到了个神奇的现象 好像是bug

【 TiDB 使用环境】自己的虚拟机
【 TiDB 版本】v6.0.0
【遇到的问题】
set global auto_increment_increment 短暂失效

MySQL [test]> create table t1 (a int not null primary key auto_increment);
Query OK, 0 rows affected (0.13 sec)


突然出现global 未生效的情况

查看后好用

再退出重连好用

重复这个操作依然会有global 未生效的情况

再次插入就生效了

如果修改global 直接退出重连

设置global 之后要插入一下 再退出重进之后插入会遇到


这样重连之后先查询参数也不会出现

TiDB 能保证自增值的单调性,但并不能保证其连续性。示例图比较混乱没太看明白,最好能用文字版的命令说明,global重连未生效是指设置完退出重连后查询show variables like 未生效?

我简单说明一下
设置完global 之后 当前不生效这个是正常的 但是发生了退出重连global 未生效的现象
如图
第一步我查看
此时能看到还是2个2个的增加的 这是正常的 (会出现3 5 7 是因为我之前设置了session 级别的auto_increment_increment =2)
第二步 我设置了global auto_increment_increment =3 让自增主键3个3个增加
第三步 插入 查看 此时global 未生效 正常的 增加了两个 5 7 9
当我exit 再重新连接进来
第四步再插入 再查询时 正常情况应该是 5 7 9 12 但是图中是5 7 9 10
出现这个现象我很疑惑 当我查询时也能看到auto_increment_increment =3 是正确的
再插入查询时 5 7 9 10 13 这期间没有做任何其他操作
并且这个现象还可以还原出啦并非一次偶然

这个是符合预期的,而且和MySQL中行为是一致的。自增值不仅与auto_increment_increment有关,还与auto_increment_offset有关,后者默认值是1。auto_increment的输出始终满足如下公式:

auto_increment_offset + N × auto_increment_increment (N为自然数,例如1、2、3等等)

一开始你设置的auto_increment_increment为2,所以auto_increment的输出稳定为1、3、5、7、9等等,当你修改auto_increment_increment为3时,比9大并且满足上述公式的下一个值就是10,所以是10、13、16等等

1 个赞

对的 ,需要满足(ID - auto_increment_offset) % auto_increment_increment == 0
这里9后面是10满足(10 - 1)% 3 == 0
参考下这里
https://docs.pingcap.com/zh/tidb/stable/auto-increment#自增步长和偏移量设置

1 个赞

感谢大佬我明白啦啦啦啦:hugs::hugs:

感谢大佬
:laughing::laughing: 原来是这样的

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