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. 最佳实践

  1. 监控:reoptimizable
  2. 评估:效果
  3. 子游标:监控
  4. 12c+ Directives:使用
  5. Adaptive Plans:配合
  6. 统计信息:准确
  7. 测试:验证
  8. 关闭:必要时
  9. 文档:记录
  10. 原理:理解

16. 参考资料

[1] Christian Antognini, “Cardinality Feedback”, https://antognini.ch/fieldnotes [2] Christian Antognini, “Troubleshooting Oracle Performance”, Apress [3] Oracle Database SQL Tuning Guide 19c