首批通过分布式安全可靠测评,为关键业务系统打造
批量插入数据时报错 -5794:OB_AUTOINC_SERVICE_BUSY
更新时间:2026-05-08 08:11
适用版本
OceanBase 数据库 V3.x 版本。
问题现象
向一个无主键表中批量导入超过 1000 万条记录,平时 1-3 分钟左右执行完,这次执行了 17 分钟超时退出,再次执行正常。查看日志,有很多错误代码 -5794 的报错 OB_AUTOINC_SERVICE_BUSY。同时 -4019 报错也指向自增列。
[2022-03-30 08:39:04.181580] WARN [SHARE] alloc_handle (ob_autoincrement_service.cpp:131) [47838][2206][YB42AC10065B-0005D4F0231F173E] [lt=55] [dc=0] fail to alloc handle; cache is not enough(*this={table_id:{value:0, first:0, second:0}, next_value:4559457, local_sync:0, last_refresh_ts:1648600742757099, curr_node:{cache_start:4540001, cache_end:4560000}, prefetch_node:{cache_start:0, cache_end:0}}, ret=-4019)
问题原因
- 自增列的 cache 用完后尝试去拿新的 cache,这里会有一个获取 RPC 锁的操作,如果加锁失败就会报 -5794 导致 SQL 重试。
- 目标表无主键,存在隐藏自增列,大量分区同时进行获取自增列 cache 的操作,发生锁冲突,反复重试直到超时。
解决方法
调大自增列缓存来解决问题 auto_increment_cache_size,设置为 100w。