为什么基于代价的优化器做出错误选择

基于代价的优化器(CBO)在进行全表扫描时偶尔会作出一些错误的选择,这种情况尤其发生在Oracle7和Oracle8之中。有几种情况会导致这个问题,分别如下所示:最高使用标记(High water mark)太高:当要在一个表中进行大量的删除时,最高使用标记可能会远远高于实际用到的数据块(block)数量。因此,如果依赖于最高使用标记,CBO常常会错误的调用全表扫描。

错误的优化模式:如果OPTIMIZER_MODE被设置为ALL_ROWS或者CHOOSE,那么SQL优化器会更乐于使用全表扫描。如果想进行快速的OLTP优化,必须首先确认已经将OPTIMIZER_MODE设置成FIRST_ROWS。

贫乏的统计:如果表已经显著的增长,并且没有被重新分析以更新统计数据,那么也许会错误的进行全表扫描,因为CBO认为表长还是像未增长之前那么小。

偏斜的索引:如果一个查询中的候选索引存在偏斜值,那么CBO也许会错误的选择全表扫描。例如,考虑一个查找所有满足条件REGION=SOUTHERN的记录的查询。在Region栏中已经有了一个索引,但是只有1%的条目是Southern region的。在缺少列的柱状图的情况下,CBO不知道Southern region有更高的命中率,所以它会选择全表扫描。

时间: 2024-05-17 22:43:18

为什么基于代价的优化器做出错误选择的相关文章

MaxCompute理解数据、运算和用户的大脑:基于代价的优化器

MaxCompute简介 大数据计算服务(MaxCompute)是一种快速.完全托管的PB/EB级数据仓库解决方案,MaxCompute具备万台服务器扩展能力和跨地域容灾能力,是阿里巴巴内部核心大数据平台,承担了集团内部绝大多数的计算任务,支撑每日百万级作业规模.MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全. MaxCompute架构 MaxCompute基本的体系结构如上图所示,最底层就是

Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.4

oracle|优化 Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.4 3.2.3最低要求     用CBO的最低要求是设置优化器模式为FRIST_ROWS或者ALL_ROWS(或CHOOSE)并为对象生成统计资料.然而,这并不能保证你的系统能工作到最佳状态.参照第二部分(初始化参数)涉及初始化参数的信息.     不管是否设置优化器模式.如果有以下情况之一,CBO将会自动调用:      1.用到提示.     2.用到分区表.     3.设置并行表 3.2.4

Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.1

oracle|优化 Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.1        如果在Oracle以前的版本(7.0或更早)中开发应用程序,数据库会采用基于规则的优化器(译者注:以下称RBO),本篇将帮助你理解Oracle优化器并迁移到基于成本优化器(译者注:以下称CBO)的几种高效方法.下面是五大部分的第一部分   第一部分 1.         什么是优化器? 2.         为什么要优化? 3.         可用的优化器. 4.        

Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.2

oracle|优化 Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.2 3.2基于成本的优化器(CBO) 基于成本优化器遵循计算代价的方法学.所有的执行计划随成本标识,优化器选择成本最低的一个.在执行计划中,较高的成本将意味着较高的资源.成本越低,对查询来说越高效.CBO使用所有存储在数据字典中可用的统计资料信息和柱状图,用户提供提示和的参数设置来达成使用的成本,CBO生成所有可能访问方法的排列然后选择最合适的.排列的数量依赖于查询中出现的表数量,有时能达到约80,

Oracle Optimizer:迁移到使用基于成本的优化器-----系列2.1

oracle|优化 Oracle Optimizer:迁移到使用基于成本的优化器-----系列2.1   系列之二包含影响优化器选择执行计划的初始化参数和Oracle内部隐藏参数,合理设置这些参数对于优化器是相当重要的.        6.影响优化器的初始化参数        除了生成统计资料之外,下面提及的参数设置在你的系统正常工作中扮演着极重要的角色.这些设置将大多依赖于你想创建何种类型的环境.联机,批处理,数据仓库或多于一个的组合.请注意优化器考虑这些参数以评估每一个在CBO生成的执行计划

Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.3

oracle|优化 Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.3   3.2.3     可用CBO模式 CBO有两种运行模式:ALL_ROWS和FIRST_ROWS. FIRST_ROWS的目标是尽可能最快的返回行.这种模式告诉优化器响应时间是最重要的.它偏好嵌套连接方式. FIRST_ROWS也以考虑成本为主要规则来处理行.通常规则是使用索引的计划而不是使用全表扫描的计划作为访问路径,ORDER BY子句导致索引访问,等等 从9i版本起,在First提示中

关于深度学习优化器 optimizer 的选择,你需要了解这些

在很多机器学习和深度学习的应用中,我们发现用的最多的优化器是 Adam,为什么呢? 下面是 TensorFlow 中的优化器: 详情参见:https://www.tensorflow.org/api_guides/python/train 在 keras 中也有 SGD,RMSprop,Adagrad,Adadelta,Adam 等,详情: https://keras.io/optimizers/ 我们可以发现除了常见的梯度下降,还有 Adadelta,Adagrad,RMSProp 等几种优化

ORACLE优化器RBO与CBO介绍总结

RBO和CBO的基本概念   Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO)          RBO: Rule-Based Optimization 基于规则的优化器          CBO: Cost-Based Optimization 基于代价的优化器 RBO 自ORACLE 6以来被采用,一直沿用至ORA

Oracle中的优化器--CBO和RBO

Oracle中的优化器--CBO和RBO Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO)          RBO: Rule-Based Optimization 基于规则的优化器          CBO: Cost-Based Optimization 基于代价的优化器 RBO自ORACLE 6以来被采用,一直沿