【Oracle 优化器】自动重新优化(Automatic Reoptimization)功能

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 【Oracle 优化器】自动重新优化(Automatic Reoptimization)功能,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

概述

通过12c的自动重新优化(Automatic Reoptimization 以后简称AR)功能,
Oracle进一步的扩展和增强了11gR2版本的基数反馈(CFB)功能,来重新优化重复执行的SQL。

自动重新优化(AR)功能,主要包括两种形式的优化:

统计反馈(Statistics Feedback 以后简称SFB):
    用于改善由于优化器估算的基数(cardinality )不准确导致的性能问题,
    基本上是对基数反馈 (CFB)功能的增强。

性能反馈(Performance Feedback 以后简称PFB):
    主要用于改善并行度。

统计反馈(SFB)

关于统计反馈(SFB)功能,让我们再回顾一下以前介绍的基数反馈 (CFB)功能。

这里写图片描述

CFB流程处理:

1. SQL文第一次执行时,Oracle会监控操作的实际行数(A-Row),然后对比CBO估算的行数(E-Row)。

2. 如果两个值相差很大,就记录实际行数(A-Row),做上标记。
    下次执行时再次进行硬解析,根据实际行数来重新生成执行计划。

3. 如果两个值相差不大,CBO就不再监控这条SQL语句。

12c的统计反馈(SFB)功能和CFB功能流程以及实现原理都是相同,只是在一下几点得到了增强:

1.表连接的运行时统计信息(Join statistics)也会被收集和监控。

2.和自适应游标共享(Adaptive Cursor Sharing)一起针对含有绑定变量的SQL也会有效。

3.根据需要会生成SQL指令计划(SQL Plan Directives),为下一次执行生成最优的执行计划而保存的一些指令和附加信息到字典表中。
用于当数据库重启或者被优化的SQL文从内存中Age-out后,优化器依然意识到以前的反馈结果(实际行数和CBO估算的行数),在硬解析时进行动态采样等处理。

4.在V$SQL视图中,追加了一个新的列IS_REOPTIMIZABLE,用于指示SQL文在执行时实际行数和CBO估算的行数差别很大,需要在下一次执行时进行重新解析。

性能反馈(PFB)

性能反馈(PFB)也和统计反馈(SFB)的处理流程十分相似。

这里写图片描述

CFB流程处理:

1. 如果参数PARALLEL_DEGREE_POLICY(默认值为MANUAL)被设为ADAPTIVE的情况下,
    SQL文第一次执行前,Oracle会首先根据现有的性能信息来预估一个并行度(记为DOP 1)。

2. SQL文根据预估的并行度(DOP 1)进行执行,并在执行时监控操作的性能信息(如CPU时间等),
    然后根据实际性能信息计算出一个新的并行度(记为DOP 2).

3. Oracle会比较预估的并行度(DOP 1)和实际性能信息计算的并行度(记为DOP 2)。
    如果两个值相差很大,就记录实际性能信息,并做上标记。

4. 下次执行时再次进行硬解析,根据实际性能信息来重新决定并行度。

5.  如果两个值相差不大,CBO就不再监控这条SQL语句。

参考:
Database SQL Tuning Guide

Automatic Reoptimization

版权声明:本文为博主原创文章,转载请注明出处,谢谢。http://blog.csdn.net/lukeunique

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/141635.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!