通常,SQL 计划演变是优化器验证新计划并将其添加到现有SQL计划基准的过程。
本节包含以下主题:
- 计划演变的目的 通常,一条语句的SQL计划基线从一个已接受的计划开始。
- 计划演变的工作原理 计划演变涉及验证和添加计划。
- 用于计划制定的PL / SQL子程序 该
DBMS_SPM程序包提供了用于计划制定的过程和功能。
27.5.1计划制定的目的
通常,语句的SQL计划基线以一个已接受的计划开始。
但是,某些SQL语句在不同条件下以不同的计划执行时,性能很好。例如,带有绑定变量(其值导致不同的选择性)的SQL语句可能具有多个最佳计划。创建实例化视图或索引或对表进行分区可能会使当前计划比其他计划昂贵。
如果从未将新计划添加到SQL计划基准中,那么某些SQL语句的性能可能会降低。因此,有时有必要将新接受的计划演变为SQL计划基准。计划演进通过在将新计划纳入SQL计划基线之前对其进行验证来防止性能下降。
27.5.2计划演进的工作 原理
计划演变涉及验证和添加计划。
具体来说,计划制定包括以下不同步骤:
在计划演变的标准情况下,优化器将按顺序执行前面的步骤,以便SQL计划管理无法使用新计划,直到优化器验证相对于SQL计划基线的计划性能。但是,您可以将SQL计划管理配置为执行一个步骤而不执行另一个步骤。下图显示了计划制定的可能路径。
图27-4计划演变
27.5.3用于计划演进的PL / SQL子程序
该DBMS_SPM软件包提供了用于计划制定的过程和功能。
这些子程序使用任务基础结构。例如,CREATE_EVOLVE_TASK创建一个演化任务,而EXECUTE_EVOLVE_TASK执行它。所有任务演化子程序EVOLVE_TASK的名称中都包含字符串。
根据需要使用演进过程,或将子程序配置为自动运行。自动维护任务SYS_AUTO_SPM_EVOLVE_TASK每天在计划的维护窗口中执行。该任务自动执行以下操作:
- 选择并排列不可接受的计划进行验证
- 如果满足性能阈值,则接受每个计划
也可以看看:
- “ 管理SPM Evolve Advisor任务 ”
- “ 手动更改SQL计划基准 ”
- Oracle Database PL / SQL软件包和类型参考以了解该
DBMS_SPM软件包
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




