请阐述在 Oracle 数据库中,如何运用 SQL 计划管理(SPM)对执行计划实施管理?
考察说明
考察对 Oracle SPM 机制及其在稳定执行计划方面作用的理解。
回答思路
- 【回答框架 1】SQL 计划管理(SPM)是一种预防性机制,旨在通过维护一个 SQL 语句的可接受执行计划基线,来防止因执行计划变更导致的性能回退。它通过捕获和管理执行计划的演变过程,确保使用已知良好的计划。
- 【回答框架 2】启用 SPM 通常通过设置初始化参数 optimizer_capture_sql_plan_baselines 和 optimizer_use_sql_plan_baselines 来实现。前者控制是否自动捕获新计划,后者控制是否启用基线选择。基线可以自动或手动加载。
- 【回答框架 3】SPM 的工作流程是:数据库为重复执行的 SQL 语句维护一个计划历史,当新计划生成时,如果与现有基线不匹配,则会被标记为待接受,并经过验证(通常通过性能比较)后,若更优则可能被接受,否则被拒绝或保留。
- 【回答框架 4】管理器可以使用 DBMS_SPM 包来管理计划基线,包括加载、演变、固定、修改等操作,例如使用 evolve_sql_plan_baseline 进行计划演变。
- 【回答框架 5】SPM 的核心价值在于减少计划不稳定性,但需要结合统计信息收集策略、索引维护等综合考虑,因为其不能解决所有性能问题。
- 【关键点 1】SPM 通过基线机制选择已知良好的执行计划,避免计划突变。
- 【关键点 2】启用与关闭由参数 optimizer_use_sql_plan_baselines 控制。
- 【关键点 3】计划演变验证新计划性能,可自动或手动接受。
- 【关键点 4】DBMS_SPM 包提供全面的基线管理功能。
- 【关键点 5】SPM 无法替代合理的优化器统计信息管理。
- 【易错点 1】将 SPM 视为万能,忽略统计信息陈旧等根本问题。
- 【易错点 2】误以为 SPM 会即时生效,实际需要验证过程。
- 【易错点 3】混淆固定计划与计划基线,固定计划是手工指定,基线是自动管理的集合。