首批通过分布式安全可靠测评,为关键业务系统打造
开启 _optimizer_better_inlist_costing 会引发随机 core 等异常
更新时间:2026-06-10 01:56
问题现象
某个租户显式设置过 _optimizer_better_inlist_costing=true,重启后会有随机 core 或者异常。
关键诊断信息
触发条件
租户显式设置过 _optimizer_better_inlist_costing=true,重启。
事前巡检
-- 当下述查询有值,集群为未修复版本时,重启会引发非预期问题
select tenant_id from __all_virtual_tenant_parameter_stat where name like "%_optimizer_better_inlist_costing%" and value like "%true%";
事后诊断
无,触发该问题会导致正确性问题,会引发随机错误或者 core。可以通过内部表、日志、本地配置文件确认是否设置过 _optimizer_better_inlist_costing 为 true。
问题原因
OceanBase 数据库 V4.x 存储层依赖 table schema 中的 column array 按 column_id 大小有序,schema 刷新构造系统表 table schema 未加 order by,租户开启 _optimizer_better_inlist_costing 的时候,相关查询会走索引 (table_id, column_name),导致结果集无法确保为主键序 (tenant_id, table_id, column_id),会导致构造出来的系统表 table schema 的 column array 乱序,相关系统表读写语句结果会串列,进而引发正确性问题等异常。
问题的风险及影响
会触发正确性问题等异常。
影响租户
影响 OceanBase 数据库中的 Oracle 租户和 MySQL 租户,对于 SYS 租户无影响。
影响版本
OceanBase 数据库企业版 V4.1.0 GA(oceanbase-4.1.0.0-100001122023040322)及之后版本、V4.2.0 GA(oceanbase-4.2.0.0-100010082023083014)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V4.1.0 BP4(oceanbase-4.1.0.2-104000032023092119)、V4.2.0 BP1(oceanbase-4.2.0.0-101000042023091319)。
带该问题的集群需要手工关闭
_optimizer_better_inlist_costing,否则重启会引发非预期问题。-- SYS 租户下执行,xxx 为 tenant_name ALTER SYSTEM SET _optimizer_better_inlist_costing = "False" tenant=xxx; -- 租户下执行 ALTER SYSTEM SET _optimizer_better_inlist_costing = "False";
规避方式
参照上述方式检查并关闭租户的 _optimizer_better_inlist_costing 功能。