暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C 优化器统计顾问程序概念

原创 Asher.HU 2021-02-04
1501


Optimizer Statistics Advisor使用与自动数据库诊断监视器(ADDM),SQL Performance Analyzer和其他顾问相同的顾问框架。


1 Optimizer Statistics Advisor的组件

Optimizer Statistics Optimizer框架将其元数据存储在数据字典和动态性能视图中。

以下维恩图显示了Optimizer Statistics Advisor的规则,发现,建议和操作之间的关系。例如,所有发现都源自规则,但并非所有规则都会生成发现。

图18-2 Optimizer Statistics Advisor组件



1.1 Optimizer Statistics Advisor的规则

一个优化程序统计顾问规则是Oracle提供的标准,通过该优化程序统计顾问执行其检查。

这些规则体现了基于当前功能集的Oracle最佳实践。如果最佳实践因发行版本而异,则Optimizer Statistics Advisor规则也会更改。

顾问程序将规则分为以下几类:

  • 系统

    此类检查统计信息收集的首选项,自动统计信息收集作业的状态,SQL计划指令的使用等。在这一类规则具有价值SYSTEMV$STATS_ADVISOR_RULES.RULE_TYPE

  • 运作方式

    此类检查统计信息收集是否使用默认值,是否使用过程创建测试统计信息,等等。在这一类规则具有价值 SET_*_STATSOPERATIONV$STATS_ADVISOR_RULES.RULE_TYPE

  • 目的

    此类检查统计信息的质量,统计信息的陈旧性,不必要的统计信息收集等。在这一类规则具有价值OBJECTV$STATS_ADVISOR_RULES.RULE_TYPE

规则检查以下问题:

  • 如何收集统计数据

    例如,一条规则可能会为初始化参数指定建议的设置。另一个规则可能指定应在架构级别收集统计信息。

  • 何时收集统计数据

    例如,顾问可能建议应该启用自动统计信息收集工作的维护窗口,或者应该扩展该窗口。

  • 如何提高统计收集效率

    例如,一条规则可能指定应在中使用默认参数DBMS_STATS,或者不应手动设置统计信息。

在中V$STATS_ADVISOR_RULES,每个规则都有一个唯一的字符串ID,可在DBMS_STATS过程和报告中使用。您可以使用规则过滤器来指定Optimizer Statistics Advisor应检查的规则。但是,您不能编写新规则。

示例18-1 V $ STATS_ADVISOR_RULES中的上市规则

以下查询以及示例输出列出了中规则的子集V$STATS_ADVISOR_RULES发行版本之间的规则可能会有所不同。

SET LINESIZE 208
SET PAGESIZE 100
COL ID FORMAT 99
COL NAME FORMAT a33
COL DESCRIPTION FORMAT a62

SELECT RULE_ID AS ID, NAME, RULE_TYPE, DESCRIPTION 
FROM   V$STATS_ADVISOR_RULES 
WHERE  RULE_ID BETWEEN 1 AND 12
ORDER BY RULE_ID;

ID NAME                            RULE_TYPE DESCRIPTION
-- ------------------------------- --------- -------------------------------------------------------
 1 UseAutoJob                      SYSTEM    Use Auto Job for Statistics Collection
 2 CompleteAutoJob                 SYSTEM    Auto Statistics Gather Job should complete successfully
 3 MaintainStatsHistory            SYSTEM    Maintain Statistics History
 4 UseConcurrent                   SYSTEM    Use Concurrent preference for Statistics Collection
 5 UseDefaultPreference            SYSTEM    Use Default Preference for Stats Collection
 6 TurnOnSQLPlanDirective          SYSTEM    SQL Plan Directives should not be disabled
 7 AvoidSetProcedures              OPERATION Avoid Set Statistics Procedures
 8 UseDefaultParams                OPERATION Use Default Parameters in Statistics Collection Proc.
 9 UseGatherSchemaStats            OPERATION Use gather_schema_stats procedure
10 AvoidInefficientStatsOprSeq     OPERATION Avoid inefficient statistics operation sequences
11 AvoidUnnecessaryStatsCollection OBJECT    Avoid unnecessary statistics collection
12 AvoidStaleStats                 OBJECT    Avoid objects with stale or no statistics

12 rows selected.

也可以看看:

Oracle数据库参考以了解更多信息V$STATS_ADVISOR_RULES

 


 1.2 Optimizer Statistics Advisor的发现

当Optimizer Statistics Advisor检查数据库中存储的证据并得出未遵循规则的结论时,将得出一个发现。

为了生成结果,Optimizer Statistics Advisor执行一个任务,该任务可以自动或手动调用。此任务分析存储在数据字典中的统计信息历史记录,统计信息操作日志以及中存在的当前统计信息足迹SYSAUX例如,顾问查询DBA_TAB_STATISTICSDBA_IND_STATISTICS确定统计信息是否过时,或行数之间是否存在差异。

通常,尽管某些发现(例如对象陈旧性)仅提供信息,但是当未遵循或违反特定规则时,Optimizer Statistics Advisor会生成发现。例如,发现可能显示DBMS_STATS.GATHER_TABLE_STATS已使用ESTIMATE_PERCENT=>0.01,这违反了ESTIMATE_PERCENT=>AUTO_SAMPLE_SIZE规则。

一个发现恰好对应一个规则。但是,规则可以产生许多发现。

 

 
1.3针对Optimizer Statistics Advisor的建议

根据每个发现,Optimizer Statistics Advisor会提供有关如何获得更好统计信息的建议。

例如,顾问可能会发现违反了在收集统计信息时不使用采样的规则,并建议AUTO_SAMPLE_SIZE改为指定顾问将建议存储在中DBA_ADVISOR_RECOMMENDATIONS

单个建议可能存在多个建议。在这种情况下,您必须进行调查以确定要遵循的建议。每个建议都包含一个或多个理由,这些理由可以解释为什么Optimizer Statistics Advisor提出建议。在某些情况下,调查结果可能不会产生建议。

 


 1.4 Optimizer Statistics Advisor的操作

Optimizer Statistics Advisor操作是实现建议的SQL或PL / SQL脚本。可行时,建议会采取相应的措施。顾问将操作存储在中DBA_ADVISOR_ACTIONS

例如,Optimizer Statistics Advisor执行一个任务,该任务执行以下步骤:

  1. 检查规则

    顾问检查是否应避免使用过时的统计信息的规则。

  2. 产生发现

    顾问程序发现许多对象没有统计信息。

  3. 产生推荐

    顾问建议收集没有统计信息的对象的统计信息。

  4. 产生动作

    该顾问程序将生成一个执行的PL / SQL脚本,该脚本DBMS_STATS.GATHER_DATABASE_STATS提供需要收集统计信息的对象列表。




2.1 Optimizer Statistics Advisor的操作模式

Optimizer Statistics Advisor支持自动和手动模式。

  • 自动化的

    预定义的任务AUTO_STATS_ADVISOR_TASK每天自动在维护窗口中运行一次。该任务作为自动优化器统计信息收集客户端的一部分运行。自动化任务会生成结果和建议,但不会自动实施操作。

    对于任何其他任务,您可以配置自动化任务并生成报告。如果报告建议采取措施,则可以手动实施措施。

  • 手册

    您可以使用DBMS_STATS.CREATE_ADVISOR_TASK函数创建自己的任务,然后随时使用该EXECUTE_ADVISOR_TASK过程运行它

    与自动任务不同,手动任务可以自动执行操作。或者,您可以配置任务以生成PL / SQL脚本,然后可以手动运行该脚本。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论