基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
OceanBase 数据库 V4.x 版本中因 __all_virtual_sql_audit 查询超时导致死锁信息无法成功记录到视图 __all_virtual_deadlock_event_history
更新时间:2026-05-25 01:56
问题现象
在 OceanBase 数据库 V4.x 版本的集群下,手动模拟死锁现象后,查询 CDB_OB_DEADLOCK_EVENT_HISTORY、DBA_OB_DEADLOCK_EVENT_HISTORY、__all_virtual_deadlock_event_history 等视图发现死锁未记录。
关键日志信息如下。
observer.log.20250522093419634:[2025-05-22 09:31:30.850761] WDIAG [DETECT] get_holding_sql (ob_deadlock_detector_mgr.cpp:724) [2291672][T1008_L0_G0][T1008][YB421EB5210D-0006358C007B9E0C-0-0] [lt=10][errcode=-4012] failed to get sql history in transaction(tmp_ret=-4012, tmp_ret="OB_TIMEOUT", sql_hisory=[], ret=-4012, ret="OB_TIMEOUT", sess_id=3221522956, trans_id=234417352, hold_seq=3, holding_sql_request_time=, holding_sql=)
observer.log.20250522093419634:[2025-05-22 09:31:30.850785] WDIAG [DETECT] get_trans_history_sql_from_audit_ (ob_deadlock_detector_mgr.cpp:632) [2291672][T1008_L0_G0][T1008][YB421EB5210D-0006358C007B9E0C-0-0] [lt=22][errcode=-4012] fail to get holding sql(ret=-4012, ret="OB_TIMEOUT", collected_info={binary_key:{type:0, trans_id:{txid:234417352}}, tenant_id:1008, addr:"30.181.33.13:2882", detector_id:124167, report_time:1747877485940101, created_time:1747877485806902, event_id:8771658490551833432, role:"victim", start_delay:0, priority:{priority_range:0, priority_value:18444996196237813895}, user_report_info:{module_name:"transaction", resource_visitor:"{session_id:3221522956}(associated:3221522956):{txid:234417352}", blocked_seq:230298032, required_resource:"{addr:"30.181.33.13:2882"}:{ls:1001}:{tablet:215998}:{row_key:{"NUMBER":"1"}}", extra_columns_names:["wait_sql"], extra_columns_values:["Y0-0000000000000000-0-0:UPDATE t1_deadlock_test SET status = 4 where id = 1"], valid_extra_column_size:1}}, collect_info_msg={dest_key:{type:0, trans_id:{txid:234417352}}, collected_info:[{binary_key:{type:0, trans_id:{txid:234417352}}, tenant_id:1008, addr:"30.181.33.13:2882", detector_id:124167, report_time:1747877485940101, created_time:1747877485806902, event_id:8771658490551833432, role:"victim", start_delay:0, priority:{priority_range:0, priority_value:18444996196237813895}, user_report_info:{module_name:"transaction", resource_visitor:"{session_id:3221522956}(associated:3221522956):{txid:234417352}", blocked_seq:230298032, required_resource:"{addr:"30.181.33.13:2882"}:{ls:1001}:{tablet:215998}:{row_key:{"NUMBER":"1"}}", extra_columns_names:["wait_sql"], extra_columns_values:["Y0-0000000000000000-0-0:UPDATE t1_deadlock_test SET status = 4 where id = 1"], valid_extra_column_size:1}}, {binary_key:{type:0, trans_id:{txid:234416446}}, tenant_id:1008, addr:"30.181.33.13:2882", detector_id:124164, report_time:1747877485940683, created_time:1747877479470494, event_id:8771658490551833432, role:"witness", start_delay:0, priority:{priority_range:0, priority_value:18444996196254803618}, user_report_info:{module_name:"transaction", resource_visitor:"{session_id:3221665687}(associated:3221665687):{txid:234416446}", blocked_seq:3, required_resource:"{addr:"30.181.33.13:2882"}:{ls:1001}:{tablet:215998}:{row_key:{"NUMBER":"2"}}", extra_columns_names:["wait_sql"], extra_columns_values:["Y0-0000000000000000-0-0:UPDATE t1_deadlock_test SET status = 2 where id = 2"], valid_extra_column_size:1}}]}, holding_seq=3, idx=0, last_idx=1)
问题原因
OceanBase 数据库在将死锁记录写入相关视图过程中,需要查询 __all_virtual_sql_audit 视图获取到相关 SQL 语句信息,如果 __all_virtual_sql_audit 内容过多,导致 OceanBase 数据库内部的查询 SQL 超时,则会导致此类异常。
问题的风险及影响
死锁记录无法成功存储。
适用版本
OceanBase 数据库 V4.x 版本。
解决方法
执行如下命令,清空 audit 内容。
ALTER SYSTEM FLUSH SQL AUDIT global;调整
ob_sql_audit_percentage参数值,避免 audit 内容过多影响查询性能。
规避方式
避免将 ob_sql_audit_percentage 设置的过大造成 audit 内容过多影响查询性能。