应用于那些执行计划已经发生了的不好的变更的SQL上(在不改变SQL文本的情况下,改变其执行计划),即便通过创建SQL Profile解决了目标SQL执行计划变更的问题,依然不能保证系统后续执行的SQL的执行计划会发生不好的变更。
a. Automatic类型的SQL Profile
1、先针对SQL创建一个名为my_sql_tuning_task_1的自动调整任务:
declare
my_task_name varchar2(30);
my_sqltext clob;
begin
my_sqltext := '目标SQL';
my_task_name := dbms_sqltune.create_tuning_task(
sql_text => my_sqltext,
user_name => 'SCOTT',
scope => 'COMPREHENSIVE',
time_limit => 60,
task_name => my_task_name,
description => 'Task to tune a query on table t1');
end;
/
2、接着执行上述自动调整任务
begin
dbms_sqltune.execute_tuning_task(task_name => 'my_sql_tuning_task_1');
end;
/
3、然后使用dbms_sqltune.report_tuning_task来查看上述自动调整任务的调整结果
SET LONG 9000
SET LONGCHUNKSIZE 1000
SET LINESIZE 800
select dbms_sqltune.report_tuning_task('my_sql_tuning_task_1') from dual;
4、上述Automatic类型的SQL Profile所产生的调整结果如果是我们想要的,只需要按Oracle的提示接受这个SQL Profile
execute dbms_sqltune.accept_sql_profile(task_name => 'my_sql_tuning_task_1', task_owner => 'SCOTT',replace => TRUE, fore_match => true)
备注:这里fore_match的值设为true的含义,是指即使目标SQL的where条件中具体的输入值发生了改变(比如n=1变为n=2),原SQL Profile依然有效,这就相当于将目标SQL的where条件中具体的输入值用绑定变量替换了。

b. Manual 类型的SQL Profile(一堆Hint的组合)
同样可以在不该SQL文本的情况下,改变其执行计划。更重要的是,Manual类型的SQL Profile可以起到很好的稳定目标SQL的执行计划的作用,这一点是Automatic类型的SQL Profile所不具备的。
我们使用脚本 coe_xfr_sql_profile.sql 可以针对目标SQL生成Manual类型的SQL Profile,并且通过“偷梁换柱”的方式在不修改目标SQL文本的情况下调整其执行计划。
1、改写SQL文本,在其中加入合适的Hint,走出我们想要的执行计划
2、查询出原目标SQL和改写后的SQL所对应的SQL ID 和 PLAN HASH VALUE
select sql_text,sql_id,version_count from v$sqlarea where sql_text like 'SQL文本';
3、针对目标SQL使用脚本 coe_xfr_sql_profile.sql 产生能生成其Manual类型的SQL Profile的脚本A (传入相应的SQL ID 和 PLAN HASH VALUE)
4、对加入合适Hint后的SQL使用脚本 coe_xfr_sql_profile.sql 产生能生成其Manual类型的SQL Profile脚本B (传入相应的SQL ID 和 PLAN HASH VALUE)
5、用脚本B中Outline Data部分的Hint组合替换掉脚本A中的Outline Data部分的Hint组合。(注意将参数force_match改为force_match => TRUE)
6、执行脚本A生成针对原目标SQL的Manual类型SQL Profile.

oracle稳定执行计划(更改)的方法的更多相关文章

  1. oracle稳定执行计划1

    稳定执行计划 1 策略: Oracle的sql 执行计划在一些场景下会发生变化,导致系统会发生不可知的情况,影响系统的稳定性,特别是关键业务的sql. 比如下面的场景: 统计信息过老,重新收集了统计信 ...

  2. Oracle sql执行计划解析

    Oracle sql执行计划解析 https://blog.csdn.net/xybelieve1990/article/details/50562963 Oracle优化器 Oracle的优化器共有 ...

  3. (转)Oracle定时执行计划任务

    Oracle定时执行计划任务 在日常工作中,往往有些事情是需要经常重复地做的,例如每天更新业务报表.每天从数据库中提取符合条件的数据.每天将客户关系管理系统中的数据分配给员工做数据库营销……因此我们就 ...

  4. 怎样看懂Oracle的执行计划

    怎样看懂Oracle的执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when ...

  5. 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题   问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件.   首先,Quartz表达式培植的启 ...

  6. Oracle的执行计划(来自百度文库)

    如何开启oracle执行计划 http://wenku.baidu.com/view/7d1ff6bc960590c69ec37636.html怎样看懂Oracle的执行计划 http://wenku ...

  7. [转] 多种方法查看Oracle SQL执行计划

    本文转自:http://falchion.iteye.com/blog/616234 一.在线查看执行计划表 如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/u ...

  8. oracle 执行计划的获取方法

    1.用explain plan for来获取执行计划 explain plan for <sql>; select * from table(dbms_xplan.display()); ...

  9. ORACLE 获取执行计划的方法

    一.获取执行计划的6种方法(详细步骤已经在每个例子的开头注释部分说明了): 1. explain plan for获取: 2. set autotrace on : 3. statistics_lev ...

随机推荐

  1. 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块

    第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...

  2. @Autowired注入为null问题分析

    题说明 最近看到Spring事务,在学习过程中遇到一个很苦恼问题 搭建好Spring的启动环境后出现了一点小问题 在启动时候却出现[java.lang.NullPointerException] 不过 ...

  3. ViewPager PagerAdapter not updating the View

    There are several ways to achieve this. The first option is easier, but bit more inefficient. Overri ...

  4. [Node.js] 06 - Multi-thread and process module

    课前阅读:关于Node.js后端架构的一点后知后觉 书推荐:<Node.js design patterns> 衍生问题: 微服务的必要性,Flux架构 容错性和拓展性 一.立体拓展 假设 ...

  5. 使用python删除一个文件或文件夹

    使用python删除一个文件或文件夹,需要使用os模块. import osos.remove(path) # path是文件的路径,如果这个路径是一个文件夹,则会抛出OSError的错误,这时需用用 ...

  6. Java:对double值进行四舍五入,保留两位小数的几种方法

    1. 功能 将程序中的double值精确到小数点后两位.可以四舍五入,也可以直接截断. 比如:输入12345.6789,输出可以是12345.68也可以是12345.67.至于是否需要四舍五入,可以通 ...

  7. 一、在windows环境下修改pip镜像源的方法(以python3为例)

    在windows环境下修改pip镜像源的方法(以python3为例) 1.在windows文件管理器中,输入 %APPDATA% 2.会定位到一个新的目录下,在该目录下新建pip文件夹,然后到pip文 ...

  8. df

    hdu 1052 Tian Ji -- The Horse Racing (2011-08-26 08:32:51) 转载▼ 标签: 杂谈 分类: acm杂谈 Tian Ji -- The Horse ...

  9. nodejs----http系统模块使用和fs系统模块

    ----- const http=require("http"); const fs=require("fs"); var httpserver=http.cr ...

  10. d9

    # 整体进度# python基础 ——38天 2个月# 数据库 —— 存储数据和信息用的,本质上和文件没有区别 1-2周 # —— 增删改查更方便了# 前端 —— 2周# 框架 —— django 2 ...