【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】社区版OceanBase 4.2.1.2
【 使用版本 】社区版OceanBase 4.2.1.2
【问题描述】创建表时指定主键ID,并设置auto_increment值,插入数据时不指定id,出现id跳表的现象,集群是单机环境
表结构
id
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
2 个赞
论坛小助手
#3
用户问题总结:在使用社区版 OceanBase 4.2.1.2 单机环境时,尝试插入数据时遇到了主键 ID 跳变的情况,希望了解这一现象的原因及解决办法。
由于主键 ID 的跳变可能由多种因素引起,例如分区切换、主键切换等情况,为了更准确地定位问题,建议使用 obdiag
工具来收集当前系统的相关信息。
日志采集场景: SQL 执行出错
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”
上述命令将会帮助我们收集与 SQL 执行相关的日志信息,其中 -h
, -P
, -u
, -p
, -D
参数分别代表数据库服务器地址、端口、用户名、密码和数据库名,而 trace_id
是可选参数,用于追踪具体的 SQL 执行情况。如果知道具体的 trace_id
可以替换 'Yxx'
以获得更精确的日志信息。
为了进一步帮助您解决问题,请您提供以下信息:
- 您插入数据时使用的 SQL 语句是什么?
- 插入数据前后的主键 ID 分别是多少?
- 是否在同一分区或不同分区之间进行了插入操作?
- 系统近期是否有过主备切换、合并操作或其他可能导致主键 ID 跳变的操作?
- 您是否能够提供
obdiag
命令执行后生成的日志压缩包?这将有助于我们进一步分析问题原因。
具体信息可参考以下文档:
- 4000 ~ 4499
- 主键表和无主键表
- 10000 ~ 12000
- 插入数据时提示重复的输入,错误代码 ERROR 1062
- 创建表组
- 使用 LOAD DATA 语句旁路导入数据
- Schema 规范
附上敏捷诊断工具 obdiag 使用帮助链接
2 个赞
淇铭
#5
自增列数据结构分为两个部分:
- 内部表,持久化 当前已经使用的自增值位点;
- 缓存,内存结构 中记录的一段自增值区间,由内部表申请而得到
这个是符合预期的 如果插入部分值后继续使用自增列生成序列,就会发生跳变,因为cache size造成的
因为4.x上默认AUTO_INCREMENT_MODE = ‘ORDER’ 目前跳变的规则
场景 |
ORDER |
NOORDER |
多机多分区生成自增值 |
不跳变 |
跳变 |
INSERT插入指定最大值 |
不跳变 |
跳变 |
replace插入指定最大值 |
不跳变 |
跳变 |
重启/宕机 |
跳变,仅当leader机器发生时 |
跳变 |
切主 |
跳变 |
跳变 |
5 个赞