OPTIMIZER_INDEX_COST_ADJ与成本计算

原创 2004年07月04日 12:55:00

 

OPTIMIZER_INDEX_COST_ADJ
这个初始化参数代表一个百分比,取值范围在1到10000之间.
该参数表示索引扫描全表扫描成本的比较。缺省值100表示索引扫描成本等价转换与全表扫描成本。

这些参数对于CBO的执行具有重大影响,其缺省值对于数据库来说通常需要调整。
一般来说对于OPTIMIZER_INDEX_CACHING可以设置为90左右
对于大多数OLTP系统,OPTIMIZER_INDEX_COST_ADJ可以设置在10到50之间。对于数据仓库和DSS系统,
可能不能简单的把OPTIMIZER_INDEX_COST_ADJ设置为50,通常我们需要反复调整取得一个合理值.

更为具体的可以根据统计信息,db file scattered reads/db file sequential reads来计算.

本文通过实验对该参数的使用作出探讨和说明.

我们看到optimizer_index_cost_adj的缺省值为100.

 

[oracle@jumper udump]$ sqlplus eygle/eygle

SQL*Plus: Release 9.2.0.3.0 - Production on Mon Jun 28 17:11:15 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production

SQL> show parameter optimizer_index_cost_adj

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_index_cost_adj integer 100
SQL>

创建测试表:

 

SQL> create table t as select * from dba_objects;

Table created.

SQL> create index ind_owner on t(owner);

Index created.

SQL> analyze table t compute statistics;

Table analyzed.

 

我们分别观察一下全表扫描和索引访问的成本:

 

SQL> set autotrace traceonly


SQL> select * from t where owner='EYGLE';

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=14 Card=476 Bytes=36652)
1 0 TABLE ACCESS (FULL) OF 'T' (Cost=14 Card=476 Bytes=36652)



SQL> select /*+ index(t ind_owner) */ * from t where owner='EYGLE';

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=16 Card=476 Bytes=36652)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T' (Cost=16 Card=476 Bytes=36652)
2 1 INDEX (RANGE SCAN) OF 'IND_OWNER' (NON-UNIQUE) (Cost=2 Card=476)

 

Oracle在选择不同的访问路径时,会对全表扫描和索引扫描进行比较评估.

在比较的时候,Oracle会把索引扫描的成本转换为全表扫描的成本,和全表扫描的COST进行比较.这个转换需要一个转换因子.
就是optimizer_index_cost_adj:

optimizer_index_cost_adj * (Index Scan Cost) = 等价的 Full Scan Cost

这个 等价的 Full Scan Cost 就是来和全表扫描成本进行比较的.

而这个转换因子的临界值实际上就是Full Scan Cost 和 Index Scan Cost的比值.

即:


optimizer_index_cost_adj
= Full Scan Cost / Index Scan Cost

 

SQL> set autotrace off
SQL> select (14/16)*100 from dual;

(14/16)*100
-----------
87.5

1 row selected.

 

我们通过调整optimizer_index_cost_adj来看一下执行计划的变化:

 

SQL> set autotrace traceonly

SQL> alter session set optimizer_index_cost_adj = 87;

Session altered.

SQL> select * from t where owner='EYGLE';

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=14 Card=476 Bytes=36652)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'T' (Cost=14 Card=476 Bytes=36652)
2 1 INDEX (RANGE SCAN) OF 'IND_OWNER' (NON-UNIQUE) (Cost=2 Card=476)

此时使用索引成本较低.等价全表扫描成本为:

87% * (Index Scan Cost) < Full Scan Cost

此时Oracle选择了索引.

SQL> alter session set optimizer_index_cost_adj = 88;

Session altered.

SQL> select * from t where owner='EYGLE';

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=14 Card=476 Bytes=36652)
1 0 TABLE ACCESS (FULL) OF 'T' (Cost=14 Card=476 Bytes=36652)

此时使用索引成本较高.等价全表扫描成本为:

88% * (Index Scan Cost) > Full Scan Cost

所以Oracle选择了全表扫描.


 


参考文档:

http://www.evdbt.com/SearchIntelligenceCBO.doc

 

2004年6月28日 星期一 17:03

If you have any question,please mail to eygle@itpub.net .


PostgreSQL查询代价估算(三)

1.1.1.1    索引扫描的代价:cost_index 函数功能: 某个索引获取元组的花费。不同类型的索引,有着不同的基本属性值的(如选择率、索引相关度等)花费估算函数(在pg_am.h的am...
  • fly2nn
  • fly2nn
  • 2017年03月13日 18:55
  • 360

ArcGIS应用分析--修建最小成本道路

修建一条从学校通往目的地花费成本最低的道路。要求 1)新建路径成本较少; 2)新建路径为较短路径; 3)寻找最短路径的实现需要运用ArcGIS的空间分析(Spatial Analyst)中距离制...
  • BigSun1993
  • BigSun1993
  • 2016年01月03日 13:59
  • 1963

SQL优化-基于数据访问路径的CBO成本计算模型

数据访问路径主要分为全表扫描和索引扫描两种方式,索引扫描具体细分为索引唯一扫描、索引范围扫描、索引全扫描、索引快速全扫描和索引跳跃扫描。   下面分别对全表扫描和索引扫描的成本进行计算,在进行计算...
  • liaocongyuan1314
  • liaocongyuan1314
  • 2016年03月14日 17:57
  • 500

计算cost--全表扫描

下面教大家如何手工算出oracle执行计划中的cost值。 成本的计算方式如下: Cost = (        #SRds * sreadtim +        #MRds * mreadtim ...
  • gdmzlhj1
  • gdmzlhj1
  • 2014年08月04日 14:21
  • 868

小李飞刀系列之Oracle EBS期间平均成本(PAC)--生产成本计算(二)资源设置

在上一篇文章中,我们讨论了Oracle EBS成本计算中成本要素和层次的概念。本篇文章开始将对成本要素”资源”进行讨论。 在进行资源设置时(如图1所示),对于PAC来说,下面几处的设置比较关键:...
  • liyinglong
  • liyinglong
  • 2016年08月17日 08:27
  • 1903

深度学习笔记——理论与推导之概念,成本函数与梯度下降算法初识(一)

一、机器学习介绍 1. 概念:Learning ≈ Looking for a Function 2. 框架(Framework): 3. What is Deep Learning? ...
  • sysstc
  • sysstc
  • 2017年08月10日 11:41
  • 769

软件开发项目成本管理实践

人力不足,任务没有完成; 人力投入进去了,任务还没有完成; 结果项目延期,利润所剩无几。本文将从项目经理、软件开发团队的角度,怎么做项目成本管理。...
  • xiaoyw
  • xiaoyw
  • 2016年12月19日 22:46
  • 1823

ArcGIS教程:成本路径 (空间分析)

摘要   计算从源到目标的最小成本路径。   用法   在成本距离方面,成本路径工具可生成用于记录最小成本路径或从所选位置到累积成本面内所定义的最近源像元之间的路径的输出栅格。  在运行...
  • u010687924
  • u010687924
  • 2015年12月05日 13:16
  • 886

空间分析之距离分析

距离分析(Distance)即根据每一栅格相距其最邻近要素(也称为“源”)的距离来进行分析,从而反映出每一栅格与其最邻近源的相互关系。通过距离分析可以获得很多相关信息,指导人们进行资源的合理规划和利用...
  • SYDBC
  • SYDBC
  • 2014年01月02日 16:04
  • 2286

NoSQL的必要性和效率、成本分析

导读:本文对非关系型数据库概念NoSQL的必要性和效率、成本进行了一个非常详细的分析。 关键词:NoSQL.非关系型数据库 开源 SNS    背景   前段时间国内外对NoSQL的讨论...
  • amao1
  • amao1
  • 2014年06月10日 14:53
  • 341
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OPTIMIZER_INDEX_COST_ADJ与成本计算
举报原因:
原因补充:

(最多只允许输入30个字)