1、打开一个session,设置自动创建sql的stored_outline

    alter session set create_stored_outlines = demo;

2、抓取性能不好的sql,例如(假设nest loop 比较优):

SELECT /*+ use_hash(a,b)*/* FROM game_draw_stats_site_sale a ,game_draw b  WHERE a.draw_id =b.draw_id AND a.site_id =242023;

在本session中运行。抓取stored_outline,视图user_outlines,

User_Outline_Hints中可查到:

SELECT * FROM user_outlines;
     SELECT * FROM User_Outline_Hints;

1 SYS_OUTLINE_10010420202142101   DEMO      USED          2010-1-4  20:20:21 10.2.0.2.0 
2 NEW_PLAN                                            DEMO      UNUSED      2010-1-4 20:56:22  10.2.0.2.0

3、停止收集执行的路径(否则以下你执行的一些SQL也会放到存储概要的表格中,令接下来的处理有点困难)。

 alter session set create_stored_outlines = false;

4、在有问题的sql上创建新的outline

此时的sql是 加上正确hint的语句,例如本例中将/*+ use_hash(a,b)*/ 换成了 /*+ use_nl(a,b)*/ )

create or replace outline new_plan for category demo on SELECT /*+ use_nl(a,b)*/ * FROM  

   game_draw_stats_site_sale a ,game_draw b  WHERE a.draw_id =b.draw_id AND a.site_id =242023;

其实就是将性能不好的sql的hint名改成现在的这个性能好的hint名,达到优化、固定执行计划的目的。

5、用新创建的outline进行交换:

update outln.ol$hints
set ol_name =
decode(
ol_name,
'NEW_PLAN','SYS_OUTLINE_10010420202142101',
'SYS_OUTLINE_10010420202142101','NEW_PLAN'
)
where ol_name in ('SYS_OUTLINE_10010420202142101','NEW_PLAN')
;

update outln.ol$ ol1
set hintcount = (
select hintcount
from ol$ ol2
where ol2.ol_name in ('SYS_OUTLINE_10010420202142101','NEW_PLAN')
and ol2.ol_name != ol1.ol_name
)
where
ol1.ol_name in ('SYS_OUTLINE_10010420202142101','NEW_PLAN')
;

6、启动一个新的session进行测试:

alter session set use_stored_outlines =demo;

7、测试无误后,修改系统参数:

alter system set use_stored_outlines = demo;

8、对绑定变量的情况也可参考

SQL> alter system set use_stored_outlines =true;
 
System altered
 
SQL> create or replace outline ol_1 on SELECT * FROM game_draw_stats_site_sale a ,game_draw b  WHERE a.draw_id =b.draw_id AND a.site_id =:1;
 
Outline created
 
SQL> create or replace outline ol_2 on SELECT /*+ use_hash */ * FROM game_draw_stats_site_sale a ,game_draw b  WHERE a.draw_id =b.draw_id AND a.site_id =:1;
 
Outline created
 
SQL> show user
User is "SYS"
 
SQL> UPDATE OUTLN.OL$HINTS SET OL_NAME=DECODE(OL_NAME,'OL_1','OL_2', 'OL_2','OL_1') WHERE OL_NAME IN ('OL_1','OL_2');
 
16 rows updated
 
SQL> DROP OUTLINE OL_2;
 
Outline dropped

转载于:https://blog.51cto.com/mrdba/618915

stored_outline优化稳定执行计划相关推荐

  1. oracle稳定执行计划1

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

  2. MySQL性能优化-根据执行计划进行性能优化

    2019独角兽企业重金招聘Python工程师标准>>> 1. 使用执行计划explain命令分析 在要运行的sql前面加上explain就可以得到执行计划如下表: 在explain后 ...

  3. MySQL性能分析工具的使用:慢查询日志、EXPLAN的使用、分析优化器执行计划:trace、MySQL监控分析视图-sys schema

    文章目录 1.数据库服务器的优化步骤 2.查看系统性能参数 2.1 语法 2.2 常用参数 3.统计SQL的查询成本:last_query_cost 4.定位执行慢的SQL:慢查询日志 4.1 慢查询 ...

  4. [转]Mysql中的SQL优化与执行计划

    From : http://religiose.iteye.com/blog/1685537 一,如何判断SQL的执行效率? 通过explain 关键字分析效率低的SQL执行计划. 比如: expla ...

  5. 正确使用索引(sql优化),limit分页优化,执行计划,慢日志查询

    查看表相关命令 - 查看表结构 desc 表名- 查看生成表的SQL show create table 表名- 查看索引 show index from 表名 使用索引和不使用索引 由于索引是专门用 ...

  6. mysql 执行计划 优化_执行计划

    #### 概念 一个sql语句在没有执行(运行)之前,先计算一下该sql语句需要调用的相关资源,再决定该sql语句是否要最终执行,该行为被称为"执行计划". #### 作用 主要用 ...

  7. MySQL优化从执行计划开始(explain超详细)

    前言 小伙伴一定遇到过这样反馈:这页面加载数据太慢啦,甚至有的超时了,用户体验极差,需要赶紧优化: 反馈等同于投诉啊,多有几次,估计领导要找你谈话啦. 于是不得不停下手里头的活,赶紧进行排查,最终可能 ...

  8. mysql 数据库优化之执行计划(explain)简析

    数据库优化是一个比较宽泛的概念,涵盖范围较广.大的层面涉及分布式主从.分库.分表等:小的层面包括连接池使用.复杂查询与简单查询的选择及是否在应用中做数据整合等:具体到sql语句执行效率则需调整相应查询 ...

  9. Mysql优化之执行计划查看

    我们经常说到mysql优化,优化中一种常见的方式就是对于经常查询的字段创建索引.那么mysql中有哪些索引类型呢? 一.索引分类 1.普通索引:即一个索引只包含单个列,一个表可以有多个单列索引 2.唯 ...

最新文章

  1. 工程师忽略的隐形成本
  2. HDU 2955 Robberies
  3. foxmail、outlook发送邮件,进度条很慢
  4. Tomcat源码调试环境搭建
  5. HDU - 2457 DNA repair(AC自动机+dp)
  6. P4198 楼房重建 线段树 + 区间合并
  7. jdk 安全属性_系统属性的JDK 12 Javadoc标记
  8. C++ new和delete运算符
  9. C++ Primer 第十三章 拷贝控制
  10. webpack笔记一:webpack的介绍,安装,加载css、图片、字体等
  11. postman 第4节 切换环境和设置读取变量(转)
  12. html中css层叠样式表(行内样式,内嵌式,外部式)
  13. b区计算机复试国家线,2017考研A区B区及各学科国家线预测解析
  14. redis中hget命令
  15. 关于Windows Server 2008 Service Pack 1
  16. 2021-05-13
  17. 电脑各个硬件的理论知识 经典
  18. 【足迹C++primer】43、拷贝控制和资源管理
  19. AutoCAD无法显示虚线的解决方法
  20. 【重点:线程池续】超人气组合:Callable和Future

热门文章

  1. android 图片编辑 画圈,Android种图片圆形化的三种方式
  2. ros_tools.prompt 断点调试
  3. boost::bind with ros topic,ros中subscribe用boost::bind绑定多个参数
  4. Spring配置XML本地提示:点击eclipse属性——选择XML Catalog
  5. 伪元素选择器使用场景-字体图标(CSS3)
  6. left join 最后一条_一条Mysql查询语句的西天取经之路,你真的了解吗?
  7. 取余运算怎么算_3 数学运算 矩阵操作
  8. Halcon缺陷检测——测量拟合
  9. 基于jQuery的uploadify(flash上传文件)控件v1.6.2 bug修正
  10. Ponemon Institute告诉你,大数据正在勾搭网络安全