Oracle Antognini Cardinality 反馈
Oracle Antognini Cardinality 反馈
来源:Christian Antognini / antognini.ch/fieldnotes 适用版本:Oracle Database 11g+ 文档版本:v1.0 / 2026-07-22
1. 概述
Cardinality 反馈是 11g 引入的特性,Antognini 有深入分析[1]。
2. Cardinality Feedback
2.1 概念
- 11g+ 特性
- 执行后记录实际行数
- 下次优化使用
- 改进执行计划
2.2 工作流程
1. 第一次执行
2. 记录 A-Rows
3. 下次解析
4. CBO 使用 A-Rows
5. 改进计划
2.3 Antognini 观点
- 自我学习
- 改进
- 但不稳定
3. 启用
3.1 参数
ALTER SYSTEM SET optimizer_use_feedback=TRUE;
3.2 默认
- 11g:默认 TRUE
- 12c+:默认 TRUE
3.3 查看
SHOW PARAMETER optimizer_use_feedback
4. 工作机制
4.1 第一次执行
- CBO 用统计信息
- 执行
- 记录 A-Rows
- 标记可重新优化
4.2 第二次执行
- CBO 用 A-Rows
- 重新优化
- 可能新计划
4.3 后续
- 稳定后不再变化
- 或继续调整
5. 监控
5.1 v$sql
SELECT sql_id, child_number, is_reoptimizable, use_feedback_stats
FROM v$sql
WHERE sql_id = '&sql_id';
5.2 v$sql_reoptimization_hints
SELECT * FROM v$sql_reoptimization_hints
WHERE sql_id = '&sql_id';
5.3 Antognini 方法
- 监控 reoptimizable
- 评估
- 调整
6. 优势
6.1 自动改进
- 无需手动
- 自我学习
- 改进
6.2 无需统计
- 统计不准
- 反馈补救
- 评估
6.3 灵活
- 自动启用
- 数据驱动
7. 问题
7.1 不稳定
- 执行计划变化
- 性能波动
- Antognini 警告
7.2 子游标增多
- 多个子游标
- Library Cache 压力
- 监控
7.3 依赖
- 依赖第一次执行
- 值影响
- 评估
8. 12c+ 改进
8.1 ACS
- Adaptive Cursor Sharing
- 多计划
- 配合
8.2 ADS
- Adaptive Dynamic Sampling
- 12c+
- 增强
8.3 Antognini 观点
- 12c+ 改进
- 综合
- 评估
9. 关闭
9.1 参数
ALTER SYSTEM SET optimizer_use_feedback=FALSE;
9.2 场景
- 不稳定
- 性能波动
- 评估
9.3 Antognini 建议
- 评估
- 必要关闭
- 监控
10. Adaptive Plans
10.1 12c+
- 执行时调整
- 自适应
- 默认计划 + 缓冲
10.2 与 Feedback 对比
- Feedback:下次优化
- Adaptive:本次执行
- 互补
10.3 Antognini 分析
- 12c+ 综合
- Adaptive + Feedback
- 评估
11. Directives
12.1 12c+
- SQL Plan Directives
- 持久化反馈
- 跨 SQL
12.2 查看
SELECT * FROM dba_sql_plan_directives;
12.3 Antognini 观点
- 12c+ 增强
- 持久化
- 跨对象
12. 案例
12.1 案例:评估不准
- 统计信息差
- Feedback 改进
- 第二次更好
12.2 案例:性能波动
- Feedback 变化
- 关闭
- 评估
12.3 案例:子游标多
- Feedback 多版本
- 共享池
- 监控
13. Antognini 方法论
13.1 原则
- 评估必要性
- 监控效果
- 调整
13.2 步骤
1. 监控 reoptimizable
2. 评估效果
3. 决定启用/关闭
4. 验证
13.3 工具
- v$sql
- v$sql_reoptimization_hints
- DBMS_XPLAN
14. 常见问题
14.1 性能波动
- 计划变化
- 评估
- 关闭
14.2 子游标多
- Library Cache
- 监控
- 评估
14.3 失效
- 共享池刷新
- 重新学习
- 评估
15. 最佳实践
- 监控:reoptimizable
- 评估:效果
- 子游标:监控
- 12c+ Directives:使用
- Adaptive Plans:配合
- 统计信息:准确
- 测试:验证
- 关闭:必要时
- 文档:记录
- 原理:理解
16. 参考资料
[1] Christian Antognini, “Cardinality Feedback”, https://antognini.ch/fieldnotes [2] Christian Antognini, “Troubleshooting Oracle Performance”, Apress [3] Oracle Database SQL Tuning Guide 19c