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 ...
随机推荐
- 【转帖】流程与IT管理部——IT支撑业务变革的必然趋势
流程与IT管理部——IT支撑业务变革的必然趋势 1前言 伴随着中国企业的信息化进程, IT部门.IT专职人员已经在大部分企业获得了一席之地,电脑.网络.软件的维护都离不开这个部门:不过“一席之地”并不 ...
- [Android Studio] Using Java to call OpenCV
Environment: Android studio 2.2.3, OpenCV 2.4.9 For Android, Android 6 with api 23 for X86 一.File: b ...
- 《objective-c基础教程》学习笔记(三)—— 从结构体到面向对象
一听标题,感觉十分的抽象.面向对象就是(Object-Oriented Programming)的首字母缩写:OOP,是当今最主流的编程方法. 那么,面向对象编程具体有什么好处呢.是如何来实现呢?通过 ...
- 使用gdbserver远程调试
使用gdbserver远程调试 1.默认crosstool交叉编译器没有自带gdbserver,需要自行编译 到GNU官方FTP下载,目前最新版的是gdb-6.7.1下载地址:http://ftp ...
- 如何在Django1.8 结合Python3.4版本中使用MySql
Python2.7时代连接MySql的MySQLdb还不支持Python3.4. pip install pymysql 最关键的一点,在站点的__init__.py文件中,我们添加如下代码: 1 i ...
- 【Latex】常用工具包
字体篇: \usepackage{color} {\color{red}{Hello World!}} 表格篇: 1.resizebox \begin{table*}[!htb] \centering ...
- Java实现五子棋
代码: package com.hotusm.datastructure.list; import com.hotusm.datastructure.Log; /** * @author luqiba ...
- C#自定义Winform无边框窗体
C#自定义Winform无边框窗体 在实际项目中,WinForm窗体或者控件不能满足要求,所以就需要自己设计窗体等,当然设计界面可以用的东西很多,例如WPF.或者一些第三方的库等.本例中将采用WinF ...
- win2008在组件服务中未找到office组件服务
在win2003系统,cmd中输入 dcomcnfg ,组件服务里面找到office的组件服务,但win2008 R2 64位操作系统需要输入comexp.msc -32 tks:http://www ...
- day10 多媒体(文字 图片 音频 视频)
1计算机表示图形的几种方式 bmp:以高质量保存 用于计算机 jpg:以良好的质量保存 用于计算机或者网络 png:以高质量保存 图片大小的计算公式:图片 ...