为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:2.1.10
- 【问题描述】:使用Mydumper从mysql向tidb导入一百八十万带主键的数据,在同一个事务中修改一条数据,以及新增一条数据(此新增数据的id不进行指定,按照主键自增长),会出现主键冲突,考虑到tidb_server会缓存自增ID,试着直接插入当前数据,无异常
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。
这个是我们导入一定数据量出现的,在少量数据测试中没有发现此问题
上述问题我们的解决方案是将数据不指定id重新导入,使用tidb自增id生成,就没有问题了,是否有参数可以控制tidb_server缓存的id进行刷新
你好,
目前不支持,可以看下 tidb 在自增 id 方面的描述
https://pingcap.com/docs-cn/v3.0/reference/mysql-compatibility/#自增-id
你好,
上面的测试只是为了说明在何种情况可能出现主键冲突,如果使用的 proxy 仅为负载均衡,并且不手动输入 primary key,否则极少情况出现主键冲突。
现在有个问题就是,我导入的这一百八十万(会指定primary key ),如果只是一个事务单独进行insert,5000条测试成功率是百分之百,如果是一个事务中包含一条修改和一条不指定 primary key的insert,主键冲突率也是百分之百。
你好,可以将操作表的 auto_increment 设置大一点,超过导入的 180w 的数据,是否可行。
昨天解决生产问题,我们重新导入了这张表,使用的方式是没有指定 主键,应该是把tidb_server的id缓存刷过了,测试原来有问题的表也没问题了
设置的话可以跳过,假如设置100,tidb_server会缓存30000个id ,这个时候下次id就是 30001,设置1000000,下次id就是1000000,这个时候没有根据前面的id数自增啊,这是啥机制
你好,
如果是使用上TiDB 中,自增列只保证自增且唯一,并不保证连续分配。
可以看下 git autoincrement 对该机制的说明。是否对你有帮助。 https://github.com/pingcap/tidb/blob/26e946d25ee27a4272b495854494ade764627f80/meta/autoid/autoid.go#L434