本节讨论有关SQL Access Advisor的一般信息和使用所需的步骤,包括:
使用建议书
本节讨论使用建议的以下方面:
■建议和行动
■推荐选项
■评估模式
■在建议分析期间查看中间结果
■生成建议书
■查看建议
■停止推荐流程
■标记建议
■修改建议
■生成SQL脚本
■脚本包括分区建议时的特殊注意事项
■何时不再需要建议书
SQL Access Advisor提出了几条建议,每条建议都包含一个或多个单独的操作。
通常,每个推荐都为一个查询或一组查询提供了好处。建议中的所有个人行动必须一起实施,以实现全部利益。建议可以分享行动。
例如,CREATE INDEX语句可以为多个查询提供好处,但其中一些查询可能会受益于额外的CREATE MATERIALIZED VIEW语句。在这种情况下,顾问程序将生成两个建议:一个用于仅需要索引的查询集,另一个用于需要索引和物化视图以最佳方式运行的查询集。
分区建议是一种特殊类型的推荐。当SQL Access Advisor确定对指定基表进行分区可以提高工作负载性能时,顾问程序会为包含引用基表的查询的每个建议添加分区操作。此技术可确保在正确分区的表上实现索引和物化视图建议。
在顾问程序生成建议之前,必须首先使用SET_TASK_PARAMETER过程定义任务的参数。
如果未定义参数,则数据库使用默认值。
您可以使用SET_TASK_PARAMETER过程设置任务参数。语法如下。
DBMS_ADVISOR.SET_TASK_PARAMETER (
task_name IN VARCHAR2,
parameter IN VARCHAR2,
value IN [VARCHAR2 | NUMBER]);
有许多任务参数,为帮助识别相关参数,它们已按表18-1分类。 请注意,已弃用工作负载筛选的所有任务参数。
在以下示例中,将任务MYTASK的存储更改设置为100 MB。这表示100 MB的额外建议空间。零值表示不能分配额外的空间。负值表示顾问程序必须尝试按当前空间利用率修剪指定的数量。
EXECUTE DBMS_ADVISOR.SET_TASK_PARAMETER('MYTASK','STORAGE_CHANGE',100000000);
在以下示例中,设置VALID_TABLE_LIST参数以筛选出不包含表SH.SALES和SH.CUSTOMERS的所有查询。
EXECUTE DBMS_ADVISOR.SET_TASK_PARAMETER( -
'MYTASK','VALID_TABLE_LIST','SH.SALES,SH.CUSTOMERS');
有关SET_TASK_PARAMETER过程及其参数的详细信息,请参阅Oracle数据库PL / SQL包和类型参考。
SQL Access Advisor以两种模式运行:解决问题和评估。
默认情况下,SQL Access Advisor通过查找索引结构,分区,物化视图和物化视图日志的增强功能来尝试解决访问方法问题。
例如,解决问题的运行可能会建议创建新索引,向实体化视图日志添加新列,等等。
仅执行评估时,SQL Access Advisor仅评论提供的工作负载将使用哪些访问结构。仅评估运行可能仅生成建议,例如保留索引,保留实体化视图等。评估模式可用于准确查看工作负载正在使用的索引和物化视图。 SQL Access Advisor不评估现有基表分区的性能影响。
SQL Access Advisor现在可以在分析操作期间查看中间结果。以前,在处理完成或用户中断之前,分析操作的结果不可用。现在,即使SQL Access Advisor任务仍在执行,用户也可以访问相应的推荐和操作表中的结果。好处是长时间运行的任务可以提供证据,允许用户通过中断任务来接受当前结果,而不是等待冗长的执行完成。
要接受当前的建议集,用户必须中断任务。此中断表示SQL Access Advisor停止处理并将任务标记为INTERRUPTED。此时,用户可以更新推荐属性并生成脚本。或者,用户可以允许SQL Access Advisor完成推荐过程。
请注意,中间结果表示直到该时间点的工作负载内容的建议。如果建议对整个工作负载敏感至关重要,那么Oracle建议您允许任务执行正常完成。此外,顾问在推荐过程早期提出的建议不包含任何基表分区建议。分区分析需要处理大部分工作负载,然后才能确定分区是否有益。因此,如果SQL Access Advisor检测到某个权益,则只有稍后的中间结果才会包含基表分区建议。
您可以使用EXECUTE_TASK过程和任务名称生成建议。该过程完成后,您可以检查DBA_ADVISOR_LOG表中的实际执行状态以及已生成的建议和操作的数量。您可以在{DBA,USER} _ADVISOR_RECOMMENDATIONS中按任务名称查询建议。您可以在{DBA,USER} _ADVISOR_ACTIONS中按任务查看这些建议的操作。
EXECUTE_TASK程序
此过程对指定的任务执