最近在项目中遇到了一个很奇怪的问题,有个结构稍微复杂点的SQL(left join了十几张表)在一个项目地A查询时两秒返回数据,但是相同的SQL部署在另外一个项目地B却花费90多秒,更奇怪的是项目地B的数据库服务器比A好很多,还有数据总行数也比项目地A的少一些,然而花费的时间却多了几十倍。这个时候我比较了一下两个项目地该条sql的执行计划,发现执行计划是截然不同的。

刚开始一直以为是SQL层面的问题,不断尝试优化对应的索引,经过优化后,项目地B还是需要花费40多秒,感觉SQL层面很难进行优化了,我已经尽力了,这时候就开始怀疑会不会是其他原因,如数据库安装问题,数据库配置信息pga、sga参数等。

最后,只能选择求助公司的DBA同事,经过DBA三个多小时的努力,终于找出问题所在:

对于执行计划中,在note部分如果有“cardinality feedback used for this statement”,表示使用了基数反馈(Cardinality Feedback)。基数反馈(Cardinality Feedback)是Oracle 11.2开始Oracle有了一种新的特性,Cardinality Feedback是一个优化器自动优化的过程,优化器会自动修正重复执行的查询的执行计划。对于一些复杂的查询,比如多字段条件,字符串范围比较,数据SKEW等等,以及缺乏统计信息,优化器可能不能够产生一个完全准确的基数估计, 如丢失或统计数据不准确,或复杂的谓词的基数估计。cardinality feedback 就是基于这一原因而产生的。_optimizer_use_feedback参数默认是TRUE,即开启Cardinality Feedback,FALSE为关闭Cardinality feedback。

解决方法:关闭oracle的一个参数,对于结构上不复杂的语句

alter system set "_optimizer_use_feedback"=false;

设置完后,重新执行SQL,一秒就查询出来了;接下来反复执行sql,发现执行时间恢复正常。

Oracle相同的一个SQL执行计划截然不同的解决方法相关推荐

  1. 一个SQL逻辑读异常的解决方法

    P1A项目上线后,发现一个SQL的逻辑读相当高,这个SQL语句是一个很简单的分页语句,按照开发人员提供给我的SQL,我实际执行了一遍,逻辑读只有30左右,但是在awr报告中,平均逻辑读是300. 百思 ...

  2. stored outlines迁移成SQL执行计划基线

    stored outline迁移 stored outline是对SQL语句的一组hint.hint指示优化器对SQL语句选择一个特定的执行计划.stored outline是一种遗留技术用于提供执行 ...

  3. oracle执行计划走索引类型,SQL执行计划问题:where条件是主键(NUMBER类型字段)LIKE  :VAR,为什么执行计划不走索引?...

    SQL执行计划问题:where条件是主键(NUMBER类型字段)LIKE  :VAR,为什么执行计划不走索引? 中文社区 (MOSC) 数据库 (MOSC) 6 Replies Last update ...

  4. 资源放送丨《Oracle数据库SQL执行计划的取得和解析》PPT视频

    前段时间,墨天轮邀请Oracle优化方面的资深专家 陈晓辉 老师分享了<Oracle数据库SQL执行计划的取得和解析>,在这里我们共享一下PPT和视频,供大家参考学习. Oracle优化资 ...

  5. oracle 重设基线,Oracle SQL执行计划基线总结(SQL Plan Baseline)

    一.基础概念 Oracle 11g开始,提供了一种新的固定执行计划的方法,即SQL plan baseline,中文名SQL执行计划基线(简称基线),可以认为是OUTLINE(大纲)或者SQL PRO ...

  6. oracle cpu基线,Oracle SQL执行计划基线总结(SQL Plan Baseline)

    一.基础概念 Oracle 11g开始,提供了一种新的固定执行计划的方法,即SQL plan baseline,中文名SQL执行计划基线(简称基线),可以认为是OUTLINE(大纲)或者SQL PRO ...

  7. Oracle 查看 SQL执行计划

    Oracle 查看 SQL执行计划 SQL性能分析 执行计划可以用来分析SQL的性能 一.查看执行计划的方法 1. 设置autotrace set autotrace off: 此为默认值,即关闭au ...

  8. oracle的sql执行计划语句,最权威Oracle获取SQL语句执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

  9. Oracle中SQL调优(SQL TUNING)之最权威获取SQL执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

  10. Oracle查看SQL执行计划的方式

    Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: 1.通过sq ...

最新文章

  1. jQuery方法position()与offset()区别
  2. Spring Boot + Dataway :接口不用写,配配就出来?
  3. Android Canvas 绘图
  4. 盘点区块链的2018:技术与工具演进篇
  5. oracle 清理跟踪文件trc,trm
  6. 二叉查找树 java代码实现
  7. linux默认安装数据库密码是多少,Linux服务器上安装MySql数据库(默认安装,密码为空),首次使用需要修改密码(示例代码)...
  8. List vs IEnumerable vs IQueryable vs ICollection vs IDictionary
  9. 计算机二级c选择题怎么准备,马上计算机二级考试,你准备得怎么样了?
  10. 强烈推荐几个BAT大佬技术公众号~值得学习!
  11. [JAVA毕业设计]Web企业差旅在线管理系统源码获取和系统演示
  12. STM32 HAL库 时钟芯片RX8025T IIC的读写操作,入过的坑
  13. 操作系统--内存管理超详细整理!
  14. 转本计算机知识普及软件,江苏专转本新政策的解读
  15. vmware-vmx.exe无法结束进程
  16. 那么如何高效管理Linkedin账号
  17. 【无标题】汇编实验-学生成绩管理系统
  18. 手把手教你打造全宇宙最强 Firefox 浏览器
  19. 国嵌,够欠!---ARM在线教育误区
  20. CCNA 考试心得总结

热门文章

  1. deeplin显示安装空间不够_太实用了!这种冷门的显示器支架可帮了大忙了
  2. 数据集:各地区化妆品销量、人口数量和人均收入
  3. java 接收soap_2.技巧: 用 JAXM 发送和接收 SOAP 消息—Java API 使许多手工生成和发送消息方面必需的步骤自动化...
  4. 在执行某个行为时,其大脑是否产生了对应的稳定脑神经模式映射?如果存在稳定映射,是否能运用机器学习方法发现未知行为神经回路?
  5. 朴素贝叶斯算法优缺点
  6. IIS发布web网站
  7. button按钮的四种监听及实例
  8. ajax每次只加载3张图片,使用加载图片解决在Ajax数据加载中页面出现短暂空白的问题(推荐)...
  9. CS231n李飞飞计算机视觉 迁移学习之物体定位与检测上
  10. linux全局查找-find,locate,whereis,which,type区别