oracle稳定执行计划(更改)的方法
应用于那些执行计划已经发生了的不好的变更的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稳定执行计划(更改)的方法的更多相关文章
- oracle稳定执行计划1
稳定执行计划 1 策略: Oracle的sql 执行计划在一些场景下会发生变化,导致系统会发生不可知的情况,影响系统的稳定性,特别是关键业务的sql. 比如下面的场景: 统计信息过老,重新收集了统计信 ...
- Oracle sql执行计划解析
Oracle sql执行计划解析 https://blog.csdn.net/xybelieve1990/article/details/50562963 Oracle优化器 Oracle的优化器共有 ...
- (转)Oracle定时执行计划任务
Oracle定时执行计划任务 在日常工作中,往往有些事情是需要经常重复地做的,例如每天更新业务报表.每天从数据库中提取符合条件的数据.每天将客户关系管理系统中的数据分配给员工做数据库营销……因此我们就 ...
- 怎样看懂Oracle的执行计划
怎样看懂Oracle的执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when ...
- 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题
记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件. 首先,Quartz表达式培植的启 ...
- Oracle的执行计划(来自百度文库)
如何开启oracle执行计划 http://wenku.baidu.com/view/7d1ff6bc960590c69ec37636.html怎样看懂Oracle的执行计划 http://wenku ...
- [转] 多种方法查看Oracle SQL执行计划
本文转自:http://falchion.iteye.com/blog/616234 一.在线查看执行计划表 如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/u ...
- oracle 执行计划的获取方法
1.用explain plan for来获取执行计划 explain plan for <sql>; select * from table(dbms_xplan.display()); ...
- ORACLE 获取执行计划的方法
一.获取执行计划的6种方法(详细步骤已经在每个例子的开头注释部分说明了): 1. explain plan for获取: 2. set autotrace on : 3. statistics_lev ...
随机推荐
- SPARKR,对RDD操作的介绍
(转载)SPARKR,对RDD操作的介绍 原以为,用sparkR不能做map操作, 搜了搜发现可以. lapply等同于map, 但是不能操作spark RDD. spark2.0以后, spar ...
- [Algorithm] Warm-up puzzles
闲下来后,需要讲最近涉及到的算法全部整理一下,有个indice,方便记忆宫殿的查找 MIT的算法课,地球上最好:https://ocw.mit.edu/courses/electrical-engin ...
- Web上传文件的原理及实现
现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload.还有Struts1.x和Struts2中带的上传文件功能(实际上,Struts2 ...
- nodejs小问题拾遗
1.npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\Root\package.json' cd 切换到D:\n ...
- PHP针对中英文混合字符串长度判断及截取方法
PHP自带的函数如strlen().mb_strlen()都是通过计算字符串所占字节数来统计字符串长度的,一个英文字符占1字节.例: $enStr = 'Hello,China!'; echo str ...
- time时间模块
时间模块 和时间有关系的我们就要用到时间模块.在使用模块之前,应该首先导入这个模块. #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.time( ...
- ERP项目实施记录02
今天去第三方公司(B公司)考察: 公司成立:2011年12月 注册地:深圳 深圳:2~3个业务员 东莞:5个开发人员,据说也是实施人员 全功能者:BOSS A公司因战略调整,要将业务"下放& ...
- PHP一个小函数
// function makeTemp($fileName="index",$ftype=0) { $tempPath="xx/xxxx/{$fileName}.htm ...
- Entity Framework Core的贴心:优雅处理带默认值的数据库字段
对于用于保存记录添加时间的数据库日期字段,我们通常会设置一个 GETDATE() 的默认值,而不是在应用程序的代码中获取当前时间进行保存,这样可以避免由于web服务器时钟不同步引起的时间偏差. Ent ...
- 使用ASP.NET Core的User Secrets特性
昨天在一个集成测试项目中实际使用 ASP.NET Core 的 user secrets 保存敏感配置信息,避免了直接保存在 appsettings.json 中,在这篇随笔中记录一下. 使用 use ...