Optimizer Statistics Advisor使用与自动数据库诊断监视器(ADDM),SQL Performance Analyzer和其他顾问相同的顾问框架。
Optimizer Statistics Optimizer框架将其元数据存储在数据字典和动态性能视图中。
以下维恩图显示了Optimizer Statistics Advisor的规则,发现,建议和操作之间的关系。例如,所有发现都源自规则,但并非所有规则都会生成发现。
图18-2 Optimizer Statistics Advisor组件
一个优化程序统计顾问规则是Oracle提供的标准,通过该优化程序统计顾问执行其检查。
这些规则体现了基于当前功能集的Oracle最佳实践。如果最佳实践因发行版本而异,则Optimizer Statistics Advisor规则也会更改。
顾问程序将规则分为以下几类:
此类检查统计信息收集的首选项,自动统计信息收集作业的状态,SQL计划指令的使用等。在这一类规则具有价值SYSTEM
的V$STATS_ADVISOR_RULES.RULE_TYPE
。
此类检查统计信息收集是否使用默认值,是否使用过程创建测试统计信息,等等。在这一类规则具有价值的。 SET_*_STATS
OPERATION
V$STATS_ADVISOR_RULES.RULE_TYPE
此类检查统计信息的质量,统计信息的陈旧性,不必要的统计信息收集等。在这一类规则具有价值OBJECT
的V$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
当Optimizer Statistics Advisor检查数据库中存储的证据并得出未遵循规则的结论时,将得出一个发现。
为了生成结果,Optimizer Statistics Advisor执行一个任务,该任务可以自动或手动调用。此任务分析存储在数据字典中的统计信息历史记录,统计信息操作日志以及中存在的当前统计信息足迹SYSAUX
。例如,顾问查询DBA_TAB_STATISTICS
并DBA_IND_STATISTICS
确定统计信息是否过时,或行数之间是否存在差异。
通常,尽管某些发现(例如对象陈旧性)仅提供信息,但是当未遵循或违反特定规则时,Optimizer Statistics Advisor会生成发现。例如,发现可能显示DBMS_STATS.GATHER_TABLE_STATS
已使用ESTIMATE_PERCENT=>0.01
,这违反了ESTIMATE_PERCENT=>AUTO_SAMPLE_SIZE
规则。
一个发现恰好对应一个规则。但是,规则可以产生许多发现。
根据每个发现,Optimizer Statistics Advisor会提供有关如何获得更好统计信息的建议。
例如,顾问可能会发现违反了在收集统计信息时不使用采样的规则,并建议AUTO_SAMPLE_SIZE
改为指定。顾问将建议存储在中DBA_ADVISOR_RECOMMENDATIONS
。
单个建议可能存在多个建议。在这种情况下,您必须进行调查以确定要遵循的建议。每个建议都包含一个或多个理由,这些理由可以解释为什么Optimizer Statistics Advisor提出建议。在某些情况下,调查结果可能不会产生建议。
Optimizer Statistics Advisor操作是实现建议的SQL或PL / SQL脚本。可行时,建议会采取相应的措施。顾问将操作存储在中DBA_ADVISOR_ACTIONS
。
例如,Optimizer Statistics Advisor执行一个任务,该任务执行以下步骤:
顾问检查是否应避免使用过时的统计信息的规则。
顾问程序发现许多对象没有统计信息。
顾问建议收集没有统计信息的对象的统计信息。
该顾问程序将生成一个执行的PL / SQL脚本,该脚本DBMS_STATS.GATHER_DATABASE_STATS
提供需要收集统计信息的对象列表。
Optimizer Statistics Advisor支持自动和手动模式。
预定义的任务AUTO_STATS_ADVISOR_TASK
每天自动在维护窗口中运行一次。该任务作为自动优化器统计信息收集客户端的一部分运行。自动化任务会生成结果和建议,但不会自动实施操作。
对于任何其他任务,您可以配置自动化任务并生成报告。如果报告建议采取措施,则可以手动实施措施。
您可以使用DBMS_STATS.CREATE_ADVISOR_TASK
函数创建自己的任务,然后随时使用该EXECUTE_ADVISOR_TASK
过程运行它。
与自动任务不同,手动任务可以自动执行操作。或者,您可以配置任务以生成PL / SQL脚本,然后可以手动运行该脚本。