Wrayの知识库 Wrayの知识库
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
  • 数据库概述
  • MySQL

  • Redis

  • Oracle

    • Oracle概述
    • Oracle版本与部署选型
    • Oracle安装配置与客户端工具
    • Oracle体系结构与实例数据库
    • Oracle内存结构SGA与PGA
    • Oracle进程与后台任务
    • Oracle存储结构与表空间
    • Oracle数据类型与字符集
    • Oracle Schema对象与数据建模
    • SQL基础与Oracle语法特性
    • PLSQL基础与包过程函数
    • Oracle事务与一致性读
    • Oracle锁闩锁与并发控制
    • Undo Redo与归档日志
    • Oracle索引结构与设计
    • 执行计划与DBMS_XPLAN
    • 优化器统计信息与SQL调优
      • 1. 学习目标与定位
      • 2. 核心概念总览
      • 3. 底层原理详解
      • 4. 关键机制拆解
        • 4.1. 统计信息与基数估算
        • 4.2. 绑定变量与数据倾斜
        • 4.3. SQL Plan Management、Profile 与 Baseline
        • 4.4. Hint 治理
      • 5. 功能模块细节补充
        • 5.1. CBO
        • 5.2. Statistics
        • 5.3. Histogram
        • 5.4. Bind Variable
        • 5.5. Adaptive Plan
        • 5.6. SQL Plan Management
        • 5.7. SQL Profile
        • 5.8. SQL Baseline
        • 5.9. Hint Governance
      • 6. 开发人员重点提醒
      • 7. 运维人员重点提醒
      • 8. 典型问题与排查
      • 9. 实践建议与检查清单
      • 10. 阶段小结
    • AWR ASH与性能诊断
    • Oracle等待事件与故障排查
    • RMAN备份恢复与闪回技术
    • Data Guard与灾备架构
    • RAC集群与服务高可用
    • ASM存储与文件管理
    • Multitenant CDB与PDB
    • 分区表与VLDB实践
    • 数据泵SQLLoader与数据迁移
    • Oracle安全审计与权限治理
    • Oracle开发连接池与JDBC实践
    • JSON向量与多模型能力
    • Oracle运维规范与面试设计题
目录

优化器统计信息与SQL调优

Oracle 优化器依赖统计信息、约束、直方图、动态采样、绑定变量和 SQL 轮廓等信息选择计划。SQL 调优不是靠 Hint 硬压,而是让优化器拥有正确事实。

# 1. 学习目标与定位

维度 内容
难度层级 高级调优
核心目标 从底层运行链路理解本篇主题,能把概念、SQL、指标、故障和工程取舍连起来
适合人群 开发人员关注 SQL 可优化性和绑定变量;运维人员关注统计信息、计划稳定和调优工具。

# 2. 核心概念总览

优化器统计信息与SQL调优
├─ CBO
├─ Statistics
├─ Histogram
├─ Bind Variable
├─ Adaptive Plan
├─ SQL Plan Management
├─ SQL Profile
├─ SQL Baseline
└─ Hint Governance

这张图只用来定位本章范围。正文不会把每个词机械拆成固定问答,而是按 Oracle 的真实运行机制解释它们之间如何协作、在哪里影响开发、在哪里影响运维。

# 3. 底层原理详解

CBO 基于成本选择执行计划,成本来自对象统计、系统统计、谓词选择率、连接关系和估算行数。统计信息不准,优化器就像拿错地图开车。

绑定变量提升游标复用,但也可能在数据倾斜下导致不同参数共享不合适的计划。直方图、动态采样、自适应游标共享和 SQL Plan Management 都是在处理“数据分布与计划稳定”的矛盾。

SQL 调优要形成闭环:确认问题 SQL,采集真实计划和等待,分析基数偏差,修正 SQL/索引/统计信息,必要时稳定计划,最后复测并建立基线。

# 4. 关键机制拆解

# 4.1. 统计信息与基数估算

表行数、块数、列 NDV、NULL 数、直方图、索引聚簇因子都会影响选择率估算。分区表还涉及全局统计和分区统计一致性。

统计信息收集不是越频繁越好。频繁刷新可能导致计划抖动,不刷新又可能失真。核心表应根据变化率和业务窗口设置策略。

# 4.2. 绑定变量与数据倾斜

绑定变量减少硬解析,但如果某列数据高度倾斜,不同绑定值对应的最佳计划可能不同。Oracle 可能通过绑定变量窥探和自适应游标共享生成多个子游标。

开发人员要知道“全用绑定变量”不是万能药。对极度倾斜字段,可能需要直方图、SQL 改写或分场景 SQL。

# 4.3. SQL Plan Management、Profile 与 Baseline

SQL Profile 主要通过校正优化器估算帮助选择更好计划,SQL Baseline 主要用于限制优化器在可接受计划集合中选择,增强计划稳定性。

这些工具适合关键 SQL 的风险控制,但不能替代根因治理。长期看仍要修正统计信息、索引和 SQL 设计。

# 4.4. Hint 治理

Hint 可以直接影响访问路径、连接顺序、并行度和优化器行为。它适合用于紧急止血、特定 SQL 稳定或优化器无法推断的语义。

Hint 必须带着文档上线:为什么用、适用数据范围、验证结果、失效风险和退出条件。没有治理的 Hint 会成为未来升级和数据增长的雷。

# 5. 功能模块细节补充

本节围绕概念图中的模块逐个补充底层细节,重点讲它们在 Oracle 运行链路中的位置和相互关系,而不是按固定角色模板拆分。

# 5.1. CBO

CBO 是优化器决策或执行计划证据的一部分。调优时要看它如何影响基数估算、访问路径、连接顺序、连接方法和运行时统计;只看 Cost 或只看是否用了索引都不够。

# 5.2. Statistics

Statistics 是优化器决策或执行计划证据的一部分。调优时要看它如何影响基数估算、访问路径、连接顺序、连接方法和运行时统计;只看 Cost 或只看是否用了索引都不够。

# 5.3. Histogram

Histogram 是优化器决策或执行计划证据的一部分。调优时要看它如何影响基数估算、访问路径、连接顺序、连接方法和运行时统计;只看 Cost 或只看是否用了索引都不够。

# 5.4. Bind Variable

Bind Variable 是优化器决策或执行计划证据的一部分。调优时要看它如何影响基数估算、访问路径、连接顺序、连接方法和运行时统计;只看 Cost 或只看是否用了索引都不够。

# 5.5. Adaptive Plan

Adaptive Plan 是优化器决策或执行计划证据的一部分。调优时要看它如何影响基数估算、访问路径、连接顺序、连接方法和运行时统计;只看 Cost 或只看是否用了索引都不够。

# 5.6. SQL Plan Management

SQL Plan Management 是 SQL 表达能力的一部分。它不是单纯语法糖,而会改变优化器改写空间、中间结果规模、访问路径、排序哈希和临时空间消耗;复杂 SQL 必须用真实执行计划和行数验证。

# 5.7. SQL Profile

SQL Profile 是 SQL 表达能力的一部分。它不是单纯语法糖,而会改变优化器改写空间、中间结果规模、访问路径、排序哈希和临时空间消耗;复杂 SQL 必须用真实执行计划和行数验证。

# 5.8. SQL Baseline

SQL Baseline 是 SQL 表达能力的一部分。它不是单纯语法糖,而会改变优化器改写空间、中间结果规模、访问路径、排序哈希和临时空间消耗;复杂 SQL 必须用真实执行计划和行数验证。

# 5.9. Hint Governance

Hint Governance 是 SQL 表达能力的一部分。它不是单纯语法糖,而会改变优化器改写空间、中间结果规模、访问路径、排序哈希和临时空间消耗;复杂 SQL 必须用真实执行计划和行数验证。

# 6. 开发人员重点提醒

  • SQL 写法要避免让优化器失去判断依据,例如函数包列、隐式转换和复杂不可下推谓词。
  • 提供能代表真实数据分布的测试参数。
  • 不要把 Hint 当作默认调优手段。

# 7. 运维人员重点提醒

  • 维护统计信息策略,关注计划漂移和统计信息刷新窗口。
  • 对核心 SQL 建立 Plan Baseline 或至少记录计划哈希。
  • AWR 中跟踪 SQL 版本、子游标和绑定变量敏感性。

# 8. 典型问题与排查

  • 统计信息过期:检查 last_analyzed、stale stats 和数据变化率。
  • 绑定变量导致计划不适配:检查子游标、直方图和数据倾斜。
  • 升级后计划变化:使用 SPM、SQL 回放和计划对比。

# 9. 实践建议与检查清单

  • 核心表统计策略明确
  • 直方图使用有依据
  • 绑定变量敏感 SQL 已识别
  • Baseline/Profile 有说明
  • Hint 有退出条件

# 10. 阶段小结

本篇的学习重点不是记住术语,而是能把底层机制、业务语义和生产证据连起来。读完本篇后,应该能解释关键组件如何协作、常见问题为什么发生、开发侧如何避免制造风险、运维侧如何用指标和日志把问题定位到具体链路。

上次更新: 2026/06/25, 15:30:11
执行计划与DBMS_XPLAN
AWR ASH与性能诊断

← 执行计划与DBMS_XPLAN AWR ASH与性能诊断→

Copyright © 2023-2026 Wray | 鄂ICP备2024050235号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式