战 术 规 避 动 作 执行计划与 -凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 3502578
  • 博文数量: 718
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7790
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(718)

文章存档

2024年(4)

2023年(74)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

最近访客
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: oracle

2021-07-31 21:35:53


  1. 现象:
  2. 升级到12.2以后,原先的执行计划可能会因为以下原因改变:

  3. 语句中有or,执行计划中能看到 concatenation 这样的operation。

  4. 原因:
  5. 12.2引入了基于成本的or转换(明明11g就有了呀),导致语句性能较差

  6. 规避方法:
  7.  _optimizer_cbqt_or_expansion=false

  8. 在你的语句种使用 use_concat 这个hint

  9. 设置 optimizer_features_enable='12.1.0.2'


  10. 参考:
  11. bad execution plan with or query after update to 12.2.0.1 (doc id 2536570.1)

另外一种写法
select /* opt_param('_optimizer_cbqt_or_expansion','false') */ count(0) from ...



深入一点的知识:什么叫cbqt?

cost base query transformation
基于成本的查询转换 (cbqt)
cbqt 是一种修改查询并根据各种选项的相对成本决定最佳修改的技术。在这个过程中,它考虑了几种语义等价的查询形式,并选择成本最低的形式。

由于每个转换都需要创建查询的副本,然后需要计算该副本的成本,因此转换在内存使用和 cpu 方面是一项相对昂贵的操作,这反过来可能会增加优化器生成计划所需的时间.

在各种 oracle 版本和 11g 尝试对一长串操作进行成本转换时,转换的范围有所增加。早期版本使用基于查询结构属性的启发式(或基于规则的)转换,但不考虑这些操作的成本。假设是这些转换总是比原始转换的性能更高,但事实并非如此。


可能英文版看着更舒服:



由参数_optimizer_cost_based_transformation来控制转换,可以选择 "exhaustive"穷举, "iterative"迭代, "linear"线性, "on"开, "off"关,从而对各种转换的成本进行控制。

但是,

但是此参数也会有些bug



在11.2.0.4 中cbqt相关隐含参数:


19.10 中的cbqt:


改一下试试:
又变了,出来个两端、贪心。

参考:
基于优化器成本的查询转换 (doc id 1082127.1)



阅读(1868) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图