隐含参数 _b_tree_bitmap_plans 导致 SQL 执行计划劣化
问题现象同一关键 SQL一厂平均执行 12ms三厂平均执行 700ms三厂数据量更小根因三厂数据库设置了隐含参数 _b_tree_bitmap_plansFALSE禁用了 BITMAP CONVERSION TO ROWIDS 访问路径优化器退化为全表扫描解决方案通过 SQL Profile 为三厂绑定含 BITMAP CONVERSION 的较优执行计划执行时间降至 1ms 以内1. 问题现象业务反馈某个关键 SQL 在一厂和三厂的执行时间差距较大。三厂数据量更小理论上应该更快但实际表现相反。1.1 执行时间对比工厂平均执行时间执行计划一厂~12msBITMAP CONVERSION TO ROWIDS索引访问三厂~700msFULL TABLE SCAN全表扫描1.2 执行计划差异一厂执行计划三厂执行计划关键差异访问路径就是一厂走的BITMAP 三厂走的全表2. 根因分析2.1 关键参数三厂为新建工厂数据库实施参数标准中配置了隐含参数_b_tree_bitmap_plans FALSE。该参数在 OLTP 最佳实践中建议设为 FALSE但在本案例中恰好阻止了优化器选择最优执行计划。参数说明_b_tree_bitmap_plans 控制优化器是否考虑 BITMAP CONVERSION TO ROWIDS / FROM ROWIDS 以及 BITMAP AND/OR/MINUS 等执行计划。默认为TRUE允许设为FALSE后所有 B-tree 索引转 Bitmap 的访问路径均被禁用。2.2 影响链路一厂执行计划访问路径h : SYS.SQLPROF_ATTR( q[BEGIN_OUTLINE_DATA], q[IGNORE_OPTIM_EMBEDDED_HINTS], q[OPTIMIZER_FEATURES_ENABLE(19.1.0)], q[DB_VERSION(19.1.0)], q[OPT_PARAM(_optimizer_extended_cursor_sharing none)], q[OPT_PARAM(_optimizer_extended_cursor_sharing_rel none)], q[OPT_PARAM(_optimizer_adaptive_cursor_sharing false)], q[OPT_PARAM(_optimizer_use_feedback false)], q[OPT_PARAM(_optimizer_gather_feedback false)], q[ALL_ROWS], q[OUTLINE_LEAF(SEL$1)], q[OUTLINE_LEAF(SEL$2)], q[NO_ACCESS(SEL$2 from$_subquery$_002SEL$2)], q[BITMAP_TREE(SEL$1 LXSEL$1 OR(1 1 (TEST.SN) 2 (TEST.SUBSN) 3 (TEST.XPSN)))], q[BATCH_TABLE_ACCESS_BY_ROWID(SEL$1 LXSEL$1)], q[END_OUTLINE_DATA]); :signature : DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt); :signaturef : DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt, TRUE);三厂执行计划访问路径h : SYS.SQLPROF_ATTR( q[BEGIN_OUTLINE_DATA], q[IGNORE_OPTIM_EMBEDDED_HINTS], q[OPTIMIZER_FEATURES_ENABLE(19.1.0)], q[DB_VERSION(19.1.0)],q[OPT_PARAM(_b_tree_bitmap_plans false)], --该隐含参数阻止了优化器选择BITMAPq[OPT_PARAM(_optim_peek_user_binds false)], q[OPT_PARAM(_bloom_filter_enabled false)], q[OPT_PARAM(_optimizer_extended_cursor_sharing none)], q[OPT_PARAM(_optimizer_outer_to_anti_enabled false)], q[OPT_PARAM(_bloom_pruning_enabled false)], q[OPT_PARAM(_optimizer_extended_cursor_sharing_rel none)], q[OPT_PARAM(_optimizer_adaptive_cursor_sharing false)], q[OPT_PARAM(_and_pruning_enabled false)], q[OPT_PARAM(_optimizer_use_feedback false)], q[OPT_PARAM(_px_adaptive_dist_method off)], q[OPT_PARAM(_optimizer_strans_adaptive_pruning false)], q[OPT_PARAM(_optimizer_null_accepting_semijoin false)], q[OPT_PARAM(_optimizer_gather_feedback false)], q[OPT_PARAM(_optimizer_reduce_groupby_key false)], q[OPT_PARAM(_optimizer_nlj_hj_adaptive_join false)], q[ALL_ROWS], q[OUTLINE_LEAF(SEL$1)], q[OUTLINE_LEAF(SEL$2)], q[NO_ACCESS(SEL$2 from$_subquery$_002SEL$2)], q[FULL(SEL$1 LXSEL$1)], q[END_OUTLINE_DATA]); :signature : DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt); :signaturef : DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt, TRUE);2.3 为何 OLTP 建议设为 FALSE该参数设为 FALSE 的初衷是避免 OLTP 场景下产生不合适的 Bitmap 转换计划。当 SQL 包含多个 B-tree 索引条件尤其是星型转换、多索引 AND/OR,本案例sql为多个or查询时优化器可能生成次优的 BITMAP CONVERSION 计划。此外19c 中存在已知 BugBug 30102774— ORA-7445 [kkosbn] Error With SQL With Bitmap Plans设为 FALSE 可作为 workaround 规避该类 Bug。但对于需要使用 BITMAP CONVERSION 的特定 SQL该设置会产生负面影响。3. 解决方案3.1 方案选择最简单且影响最小的方式是使用SQL Profile为该 SQL 绑定含 BITMAP CONVERSION 的较优执行计划无需修改全局参数不影响其他 SQL 的执行计划。3.2 一厂 SQL Profile Outline较优计划从一厂获取该 SQL 的较优执行计划 Outline通过 SQL Profile 绑定到三厂。关键 Hint 如下BITMAP_TREE(SEL$1 LXSEL$1 OR(1 1 (TEST.SN) 2 (TEST.SUBSN) 3 (TEST.XPSN)))BATCH_TABLE_ACCESS_BY_ROWID(SEL$1 LXSEL$1)一厂 Outline 中包含的优化器参数绑定OPT_PARAM(_optimizer_extended_cursor_sharing none)OPT_PARAM(_optimizer_extended_cursor_sharing_rel none)OPT_PARAM(_optimizer_adaptive_cursor_sharing false)OPT_PARAM(_optimizer_use_feedback false)OPT_PARAM(_optimizer_gather_feedback false)3.3 三厂当前 SQL Profile Outline较差计划三厂执行计划 Outline 中包含的关键差异OPT_PARAM(_b_tree_bitmap_plans false)— 直接导致无法使用 BITMAP CONVERSIONFULL(SEL$1 LXSEL$1)— 全表扫描替换了 BITMAP_TREE此外还包含以下参数绑定OPT_PARAM(_optim_peek_user_binds false)OPT_PARAM(_bloom_filter_enabled false)OPT_PARAM(_bloom_pruning_enabled false)OPT_PARAM(_and_pruning_enabled false)OPT_PARAM(_optimizer_outer_to_anti_enabled false)OPT_PARAM(_optimizer_null_accepting_semijoin false)OPT_PARAM(_optimizer_reduce_groupby_key false)OPT_PARAM(_optimizer_nlj_hj_adaptive_join false)OPT_PARAM(_px_adaptive_dist_method off)OPT_PARAM(_optimizer_strans_adaptive_pruning false)3.4 效果验证阶段执行计划平均执行时间优化前三厂原始FULL TABLE SCAN~700ms一厂参考值BITMAP CONVERSION TO ROWIDS~12ms优化后绑定 SQL ProfileBITMAP CONVERSION TO ROWIDS小于 1ms绑定 SQL Profile 后三厂该 SQL 的执行时间从 700ms 降至 1ms 以内性能提升约700 倍。4. _b_tree_bitmap_plans 参数详解4.1 控制范围该隐藏参数控制优化器是否考虑以下执行计划BITMAP CONVERSION TO ROWIDSBITMAP CONVERSION FROM ROWIDSBITMAP AND / OR / MINUS这类 B-tree 索引转 Bitmap 再运算的执行计划。4.2 参数值说明参数值行为TRUE默认允许优化器使用 BITMAP CONVERSION 相关计划FALSE禁止所有 BITMAP CONVERSION 计划不再出现 BITMAP CONVERSION TO ROWIDS 等路径4.3 典型执行计划场景当 SQL 包含多个 B-tree 索引条件尤其是星型转换、多索引 AND/OR时优化器可能生成如下计划BITMAP CONVERSION TO ROWIDSBITMAP ANDBITMAP CONVERSION FROM ROWIDS - INDEX RANGE SCANBITMAP CONVERSION FROM ROWIDS - INDEX RANGE SCAN将 _b_tree_bitmap_plans 设为 FALSE 后上述计划全部被禁用。4.4 查看与修改查看当前值select x.ksppinm name, y.ksppstvl value, y.ksppstdf isdefault, decode(bitand(y.ksppstvf, 7), 1, MODIFIED, 4, SYSTEM_MOD, FALSE) ismod, decode(bitand(y.ksppstvf, 2), 2, TRUE, FALSE) isadj from sys.x$ksppi x, sys.x$ksppcv y where x.inst_id userenv(Instance) and y.inst_id userenv(Instance) and x.indx y.indx and x.ksppinm like %b_tree_bitmap% order by translate(x.ksppinm, _, );会话级测试ALTER SESSION SET _b_tree_bitmap_plans FALSE;Hint方式禁用/启用SELECT /* OPT_PARAM(_b_tree_bitmap_plans, TRUE) */ SELECT /* OPT_PARAM(_b_tree_bitmap_plans, FALSE) */实例级修改需重启ALTER SYSTEM SET _b_tree_bitmap_plans FALSE SCOPESPFILE;5. 经验总结1. 参数标准不能一刀切OLTP 最佳实践中建议禁用 _b_tree_bitmap_plans 以规避已知 Bug 和次优计划但需评估业务 SQL 是否依赖 BITMAP CONVERSION 路径。新建工厂实施参数标准时建议先用一厂的执行计划基线做回归测试。2. SQL Profile 是精准调优利器当全局参数调整会影响其他 SQL 时SQL Profile 可以针对单条 SQL 绑定最优执行计划影响范围最小。适合「大部分 SQL 正常个别 SQL 受影响」的场景。3. 隐含参数变更需评估影响面修改隐含参数前建议在测试环境对关键 SQL 做执行计划对比explain plan / SQL Tuning Advisor确认不会产生回归。

相关新闻

NR37-CP双麦DSP芯片:20pin CSP封装与14mA低功耗架构的电路设计权衡

NR37-CP双麦DSP芯片:20pin CSP封装与14mA低功耗架构的电路设计权衡

一、20pin CSP封装的PCB集成挑战 NR37-CP采用20pin 2.62.2mm专有CSP(Chip Scale Package)封装,底部视图,pin间距0.5mm。这一封装尺寸在芯片级属于超小型设计——2.6mm2.2mm的面积仅略大于BGA封装的接触点区域,相比QFP…

2026/7/30 12:18:11阅读更多 →
STM32F4硬件SPI驱动MCP23S17扩展GPIO实战详解

STM32F4硬件SPI驱动MCP23S17扩展GPIO实战详解

1. 项目缘起:当MCU的GPIO不够用时 做嵌入式开发的朋友,尤其是玩STM32的,应该都遇到过这个经典问题:项目做着做着,发现板子上的GPIO(通用输入输出)口不够用了。传感器要接几个,指示灯…

2026/7/30 12:18:11阅读更多 →
紧急预警:HuggingFace最新v4.42版本引发微调权重静默漂移!已定位TransformerBlock缓存bug(修复补丁限时48小时开放)

紧急预警:HuggingFace最新v4.42版本引发微调权重静默漂移!已定位TransformerBlock缓存bug(修复补丁限时48小时开放)

更多请点击: https://codechina.net 第一章:紧急预警:HuggingFace最新v4.42版本引发微调权重静默漂移!已定位TransformerBlock缓存bug(修复补丁限时48小时开放) HuggingFace Transformers v4.42.0&#xf…

2026/7/30 12:18:11阅读更多 →
Marshal上下文解析:UnmarshalingWithContext协议的高级应用

Marshal上下文解析:UnmarshalingWithContext协议的高级应用

Marshal上下文解析:UnmarshalingWithContext协议的高级应用 【免费下载链接】Marshal Marshaling the typeless wild west of [String: Any] 项目地址: https://gitcode.com/gh_mirrors/ma/Marshal Marshal是一个强大的Swift库,专注于解决[String…

2026/7/30 21:01:17阅读更多 →
孤能子化学:从分子构型到催化应用

孤能子化学:从分子构型到催化应用

1. 孤能子视角下的化学世界第一次听到"孤能子"这个概念是在研究生时期的量子化学课上。教授用粉笔在黑板上画出一个孤立的电子轨道,说:"这个孤单的小家伙,就像化学世界里的独行侠。"当时只觉得是个有趣的比喻&#xff0c…

2026/7/30 21:01:17阅读更多 →
AI搜索落地踩坑实录:从技术选型到上线3个月,我们被这4个隐藏缺陷坑了276工时(附避坑清单+迁移checklist)

AI搜索落地踩坑实录:从技术选型到上线3个月,我们被这4个隐藏缺陷坑了276工时(附避坑清单+迁移checklist)

更多请点击: https://kaifayun.com 第一章:AI搜索落地踩坑实录:从技术选型到上线3个月,我们被这4个隐藏缺陷坑了276工时(附避坑清单迁移checklist) 在将AI搜索服务从PoC阶段推进至生产环境的90天里&#x…

2026/7/30 21:01:17阅读更多 →
内存芯片老练夹具销售厂家接触稳定性远超同行业标准

内存芯片老练夹具销售厂家接触稳定性远超同行业标准

最近和一位做存储芯片的哥们儿聊天,他满脸愁容。工厂刚投了一条DDR5内存产线,结果老化测试环节问题频出。他哭诉说:“我用的那款进口老练座,价格贵得离谱不说,刚测了8000次,接触电阻就开始飘,良…

2026/7/30 21:01:17阅读更多 →
化学视角下的原子互动与实验美学

化学视角下的原子互动与实验美学

1. 孤能子视角下的化学世界化学这门学科在大多数人眼中是试管烧杯、分子方程式和实验室白大褂的组合。但当我以"孤能子"的独特视角重新审视时,发现它更像是一场永不停歇的微观粒子舞会。每个原子都像一位孤独的舞者,在特定条件下寻找着自己的舞…

2026/7/30 21:01:17阅读更多 →
NAATI翻译驾照与国外自驾翻译件要求是什么?如何办理?

NAATI翻译驾照与国外自驾翻译件要求是什么?如何办理?

办理渠道:线上小程序、NAATI官网译员。办理材料:驾照完整高清照片,部分场景补充护照个人信息页。办理流程:选好正规办理渠道,上传清晰证件材料,填写个人联系信息,完成付款之后等待译文产出&…

2026/7/30 20:59:17阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/30 15:03:16阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/30 12:22:27阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/30 15:13:02阅读更多 →
3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 🚀 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾经因为iOS系统的严格…

2026/7/30 0:00:58阅读更多 →
[GESP202606 四级] 扫雷

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:00:58阅读更多 →
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/30 0:27:26阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/30 4:47:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/30 15:43:46阅读更多 →