首批通过分布式安全可靠测评,为关键业务系统打造
批量执行 SQL ,出现 -4012 超时的原因及解决方法
更新时间:2026-05-29 08:46
问题现象
使用应用脚本进行批量执行 SQL 时,其中一条 SQL 语句执行过慢,出现 -4012 超时报错,并退出。
问题原因
查看对应的日志情况:
[2024-03-27 12:32:51.076136] WARN [STORAGE] wait (ob_store_file.cpp:132) [2804098][3738][XXXXXXXXXXX-XXXXXXXXXXXXXXXXX] [lt=141] [dc=0] Fail to wait block io, (macro_id_=4304507-18-0-0[77313715835], ret=-4012, timeout_ms=0)
[2024-03-27 12:32:51.076176] WARN [STORAGE] get_block_data (ob_micro_block_handle_mgr.cpp:64) [2804098][3738][XXXXXXXXXXX-XXXXXXXXXXXXXXXXX] [lt=39] [dc=0] Fail to wait micro block io, (ret=-4012)
[2024-03-27 12:32:51.057117] WARN [COMMON] wait (ob_io_manager.cpp:100) [2804098][3738][XXXXXXXXXXX-XXXXXXXXXXXXXXXXX] [lt=11] [dc=0] IO wait timeout, (timeout_ms=0, ret=-4012, *master_={inited:true, need_callback:true, has_finished:false, has_estimated:false, io_info:{size:12288, io_desc:{category:0, wait_event_no:1, req_deadline_time:0}, batch_count:1, io_points:[{fd:{fd:843, disk_id:{disk_idx:0, install_seq:0}}, offset:9027206348800, size:12288, write_buf:null}], fail_disk_count:0, fail_disk_ids:[]}, callback:0x7f6dae11a890, buf:0x7f8f7155d000, buf_size:12288, aligned_offset:884736, io_ret:0, finish_count:1, io_ret:0, finish_count:1, requests:0x7f6dae11a688, time:{begin_time:1711513971051925, prepare_delay:2, send_time:1711513971051927, recv_time:1711513971054249, callback_enqueue_time:1711513971054249, callback_dequeue_time:0, callback_delay:0, end_time:0}, ref_cnt:2, out_ref_cnt:1, resource_mgr:0x146c5000, io_error_handler:null, parent_io_master_holder:{ptr:null}, recover_io_master_holder:{ptr:null}, callback:{micro_block:null}})
从相关 OBServer 日志发现,SQL 执行期间,对应节点 OBServer.log 日志持续打印 IO wait timeout, (timeout_ms=0, ret=-4012,导致 SQL 执行耗时时长,较数据库空闲时有大幅增长,最后 SQL 超时退出。拆分应用跑批任务后,问题得到解决。
问题的风险及影响
影响应用批量执行 SQL 任务结果。
适用版本
OceanBase 数据库 V2.x、V3.x、V4.x 版本。
适用的租户
OceanBase 数据库的 SYS 租户、MySQL 租户、Oracle 租户。
解决方法及规避方式
拆分应用脚本,降低执行 SQL 的并发,降低 IO 的使用。