如果你只是担心 int 类型不够用,那就改成 bigint 呗。最稳妥的方案。
如果不好改可以考虑下面的方案
可以考虑设置 AUTO_ID_CACHE=100;?
这样(int 最大值)2147483647/100 约等于 2147w 次重启,这基本很小的概率能遇到了。当然了AUTO_ID_CACHE 设置较小,批量写入性能就会变差。
如果你只是担心 int 类型不够用,那就改成 bigint 呗。最稳妥的方案。
如果不好改可以考虑下面的方案
可以考虑设置 AUTO_ID_CACHE=100;?
这样(int 最大值)2147483647/100 约等于 2147w 次重启,这基本很小的概率能遇到了。当然了AUTO_ID_CACHE 设置较小,批量写入性能就会变差。
您意思是AUTO_ID_CACHE = 100 比 AUTO_ID_CACHE = 1的重启后跳跃还小?现在设置AUTO_ID_CACHE = 1 的重启跳跃是4000.
AUTO_ID_CACHE=100 你可以测试一把重启后是跳变 100 还是 4000,如果跳变是 100 那你这个问题就好解决了
AUTO_ID_CACHE=100 和AUTO_ID_CACHE=1,撇开导入时的影响,其他方面的性能影响应该是差不多的吧?差不多的话,我就改建表语句为AUTO_ID_CACHE=100 。
差不多
升级大法
学到了~
tidb的"AUTO_INCREMENT"本身好像不保证连续性。
参照官方文档设置,看看是否正常
再请教一下,我这边的表设置了AUTO_ID_CACHE=100 ,而且重启了tidb,为什么表的自增长id 的值是9 ,按道理说不应该是109吗?
show create table audit_asset_object :
CREATE TABLE audit_asset_object (
id int(11) NOT NULL AUTO_INCREMENT,
type_code varchar(128) DEFAULT NULL,
type_id int(5) DEFAULT NULL,
name varchar(128) DEFAULT NULL,
ip varchar(50) DEFAULT NULL,
mac varchar(50) DEFAULT NULL,
mask varchar(50) DEFAULT NULL,
hostname varchar(128) DEFAULT NULL,
contact varchar(128) DEFAULT NULL,
location varchar(128) DEFAULT NULL,
province varchar(128) DEFAULT NULL COMMENT ‘所属省份(保留字段)’,
city varchar(128) DEFAULT NULL COMMENT ‘所属城市(保留字段)’,
manufacture varchar(128) DEFAULT NULL,
sn varchar(128) DEFAULT NULL,
is_virtual int(1) DEFAULT ‘0’,
host_on int(1) DEFAULT NULL,
status int(1) unsigned DEFAULT ‘0’ COMMENT ‘0 激活 1 删除’,
description varchar(255) DEFAULT NULL,
create_user_id char(40) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
create_user_name varchar(128) DEFAULT NULL,
create_time datetime DEFAULT NULL,
update_user_id char(40) DEFAULT NULL,
update_user_name varchar(128) DEFAULT NULL,
update_time datetime DEFAULT NULL,
char_set varchar(30) DEFAULT ‘UTF8’,
PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=109 /*T![auto_id_cache] AUTO_ID_CACHE=100 */
官方不推荐这样使用自增列吧,容易引起写热点问题
MySQL老版本不支持持久化时也有类似的问题
指定下自增步长再试下
还有个办法是创建一个sequence,然后id列指定使用这个sequence,就可以控制步长了
最终还是优化器决定这个hint的结果吧
使用优化器优化一下
TiDB 的自增字段默认会缓存一定数量的值以提高性能。即使设置了 AUTO_ID_CACHE=1 ,TiDB 可能仍会根据内部机制分配更大的缓存块
我感觉哈,是 TiDB 正常设计,AUTO_ID_CACHE=1 已发挥作用。
可以保留该配置 + 监控 ID 使用率 + 低峰期批量修改为 bigint