当前位置: 首页 > news >正文

基于Oracle的SQL优化--学习(八)

Oracle里执行计划的稳定

 使用SQL Profile来稳定执行计划

   使用SQL Profile可以很容易的实现下面的目标:

    (1)锁定或者说稳定执行计划。

    (2)在不能修改目标SQL的SQL文本的情况下使目标SQL语句按指定的执行计划运行。

   SQL Profile有两种类型,一种是Automatic,一种是Manual。

   Automatic类型的SQL Profile

    Automatic 类型的 SQL Profile 其实就是针对目标 sQL 的一些额外的调整信息,这些信息存储在数据字典里.当有了 Automatic 类型的 SQL Profile 后,Oracle在产生执行计划时就会根据它对目标 sQL 所涉及的统计信息等内容做相应的调整,因而能够在一定程度上避免产生错误的执行计划。不用担心 Automatic 类型的 sQL Profile 的准确性,因为 oracle 会使用类似于动态采样技术那样的手段来保证这些额外调整信息相对准确。

    Automatic 类型的 SQL Profile 并不会像 Stored Outline 那样锁定目标 SOL 的执行计划,因为 Automatic 类型的 SQL Profile 的本质就是针对目标 SQL 的一些额外的调整信息,这些额外的调核信息需要与原目标 sQL 的相关统计信息等内容一起作用才能得到新的执行计划.即原始 sQL 的统计信息等内容一旦发生变化,即使原有 Automatic 类型的 SQL Profile 并没有改变,该 SQL 的执行计划也可能会发生变化.从这个意义上讲, Automatic 类型的 SOL Profile 并不能完全起到稳定目标 SOL 的执行计划的作用,虽然它确实可以用来调整执行计划。

Manual类型的SQL Profile

    Manual类型的 SQL Profile 本质上就是一堆 Hint 的组合,这一堆 Hint 的组合实际上来源于执行计划中 Outline Data 部分的 Hint 组合。 Manual 类型的 SQL Profile同样可以在不更改目标 SQL的 SQL 文本的情况下调整其执行计划,而且更为重要的是, Manual 类型的 SQL Profile可以起到很好的稳定目标 SQL 的执行计划的作用,这一点是 Automatic 类型的 SQL Pro file 所不具备的。

 使用SPM来稳定执行计划

   SPM 是一种主动的稳定执行计划的手段,能够保证只有被验证过的执行计划才会被启用,当由于种种原因(比如统计信息的变更)而导致目标 SQL 产生了新的执行计划后.这个新的执行计划并不会被马上启用,直到它己经被我们验证过其执行效率会比原先执行计划高才会被启用。

   当启用了SPM后每个SQL都会存在对应的SQL Plan Baseline,这个SQL Plan Baseline中存储的就是该SQL的执行计划,如果一个SQL有多个执行计划,那就有多个SQL Plan Baseline,可以从DBA_SQL_PLAN_BASELINE中查看目标SQL所有的SQL Plan Baseline。

   DBA_SQL_PLAN_BASELINE中的列ENABLED和ACCEPTED用来描述一个SQL Plan Baseline所对应的执行计划是否被Oracle启用,只有ENABLED和ACCEPTED的值均为YES的SQL Plan Baseline所对应的执行计划才会被Oracle启用,如果一个sql有超过1个以上的SQL Plan Baseline的ENABLED和ACCEPTED的值均为YES,则Oracle会从中选择成本值最小的一个所对应的执行计划来作为该SQL的执行计划。


相关文章:

  • MySQL数字类型中的三种常用种类【转】
  • linux mmap 内存映射【转】
  • 基于Oracle的SQL优化--学习(九)
  • 基于Oracle的SQL优化--学习(十)
  • 在linux下,安装python3.5.2
  • MyBatis传入参数为list、数组、map写法
  • 基于Oracle的SQL优化--学习(十一)
  • [转] Android:微信授权登录与微信分享全解析
  • 基于Oracle的SQL优化--学习(十二)
  • 基于Oracle的SQL优化--学习(十三)
  • JAVA CAS原理深度分析
  • 基于Oracle的SQL优化--学习(十四)
  • 基于Oracle的SQL优化--学习(十五)
  • 基于Oracle的SQL优化--学习(十六)
  • Python获取amap高德地图
  • [数据结构]链表的实现在PHP中
  • 2017 年终总结 —— 在路上
  • 345-反转字符串中的元音字母
  • Date型的使用
  • gf框架之分页模块(五) - 自定义分页
  • JS笔记四:作用域、变量(函数)提升
  • REST架构的思考
  • spring boot 整合mybatis 无法输出sql的问题
  • SwizzleMethod 黑魔法
  • yii2中session跨域名的问题
  • 蓝海存储开关机注意事项总结
  • 如何解决微信端直接跳WAP端
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用权重正则化较少模型过拟合
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 一个完整Java Web项目背后的密码
  • 如何用纯 CSS 创作一个货车 loader
  • ​2021半年盘点,不想你错过的重磅新书
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #QT(TCP网络编程-服务端)
  • (04)odoo视图操作
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (一)80c52学习之旅-起始篇
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转载)从 Java 代码到 Java 堆
  • .bat批处理出现中文乱码的情况
  • .jks文件(JAVA KeyStore)
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET 依赖注入和配置系统
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • [HTML]Web前端开发技术7(HTML5、CSS3、JavaScript )CSS的定位机制——喵喵画网页
  • [IE技巧] IE 中打开Office文件的设置
  • [IE技巧] 使IE8以单进程的模式运行
  • [ios] IOS文件操作的两种方式:NSFileManager操作和流操作【转】
  • [Matlab有限元分析] 2.杆单元有限元分析
  • [office] Excel自带的编辑函数求和方法 #其他#媒体
  • [Perl] Find Shell on your Wordpress site
  • [poj 2001]Shortest Prefixes [Trie]