SQL计划基准概述
SQL计划管理是一种预防机制,可以记录和评估SQL语句的执行计划。此机制可以构建SQL计划基准,这是一组SQL语句的已接受计划。已接受的计划已被证明表现良好。
SQL计划基准的目的
SQL计划基准的目标是保持相应SQL语句的性能,而不管数据库中的更改如何。变更示例包括:
■新的优化程序版本
■对优化程序统计信息和优化程序参数的更改
■对架构和元数据定义的更改
■系统设置的更改
■SQL配置文件创建
在事件导致不可逆转的执行计划更改(例如删除索引)的情况下,SQL计划基准无法提供帮助。
Oracle数据库的SQL调优功能生成SQL配置文件,帮助优化器生成经过良好调整的计划。但是,这种机制是反应性的,并且在发生剧烈的数据库更改时无法保证稳定的性能。 SQL调优只能解决发生并识别后的性能问题。例如,由于计划更改,SQL语句可能会变为高负载,但SQL调优在计划更改发生之前无法解决此问题。
SQL计划管理可以改进或保留SQL性能的常见方案包括:
■安装新优化程序版本的数据库升级通常会导致一小部分SQL语句的计划更改。大多数这些计划变更都会导致性能变化或改进。但是,某些计划更改可能会导致性能下降。 SQL计划基准可显着降低升级产生的潜在回归。
■正在进行的系统和数据更改可能会影响某些SQL语句的计划,从而可能导致性能下降。 SQL计划基准有助于最大限度地降低性能回归并稳定SQL性能。
■部署新的应用程序模块意味着将新的SQL语句引入数据库。应用程序软件可以使用在标准测试配置中为新语句开发的适当SQL执行计划。如果系统配置与测试配置明显不同,那么数据库可以随着时间的推移发展SQL计划基准以产生更好的性能。
SQL计划基准的体系结构
SQL计划基准包含一个或多个已接受的计划,每个计划包含以下信息:
■提示集
■计划哈希值
■与计划相关的信息
计划历史记录是优化程序随时间为SQL语句生成的计划集,包括已接受和未接受的计划集。 由于只有接受的计划在SQL计划基准中,因此基准中的计划形成计划历史记录的可疑集。 例如,在优化程序为SQL计划基准生成第一个可接受的计划之后,后续计划是计划历史记录的一部分,但不是计划基准的一部分。
将计划添加到SQL计划基准的过程是计划演变。 要有资格进化,必须启用计划以供优化程序使用。
图15-1显示了一个SELECT语句,它在SQL计划基准中有两个已接受的计划。 SQL计划历史记录包括另外两个尚未证明表现良好的语句计划。
SQL管理库(SMB)是数据字典的一部分,它将SQL计划基准和计划历史记录存储在SYSAUX表空间中。 SMB还包含SQL配置文件。 SMB使用自动空间管理。