老鹰506
(Ti D Ber Uhzt Tfx J)
1
【 TiDB 使用环境】生产环境
【 TiDB 版本】7.5.3
业务库的ID是 auto_increment自增的,当前显示的Max(id)是 544679,然后show create table显示的 AUTO_INCREMENT是570001
CREATE TABLE `groupMessageTask` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
... ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=570001 COMMENT='群发消息任务表' |
然后按时间倒序排列当前的最新ID是 500433;
TIDB官方提示 “自增编号是系统批量分配给每台 TiDB 服务器的值(默认 3 万个值)”
现在的问题是,
1、如何确认分配给server就是默认的30000个ID范围呢?
2、如何查询指定server节点这个ID范围具体是多少到多少呢?
1 个赞
有猫万事足
2
不用搞的太麻烦,直接AUTO_ID_CACHE=1,这样换tidb 节点也是递增的。
老鹰506
(Ti D Ber Uhzt Tfx J)
3
嗯,新的业务表可以这样搞,但是目前是从MySQL迁移过来的老表,中间因为各种问题切换过不同的Server节点,现在发现当前的自增ID是小于Max最大值的,不确定会不会到时候这个范围用光,发生住建冲突的问题
有猫万事足
5
那这个id应该和原来的mysql表保持一致吧?
我听你的意思是这块已经不一致了?成了mysql和tidb各自算自己的递增id了?
如果说已经不一致了,那我觉得反而好处理了,重设一下这个表的自增id,大到不冲突就好了。反正也没有办法和原来的mysql做数据溯源了。
更好的办法还是从上游重新导入一遍,如果是从mysql迁移的,当初没考虑到溯源,随着时间推移查同步错误的难度会越来越大。可能同步错了也很难看出来。
kang
6
SELECT * FROM INFORMATION_SCHEMA.TIDB_TABLE_INFO WHERE TABLE_NAME = ‘groupMessageTask’; 表的自增ID分配信息
ALTER TABLE groupMessageTask AUTO_ID_CACHE 100; 调整每个TiDB节点缓存的ID数量