OPTIMIZER_INDEX_COST_ADJ与成本计算
来源:互联网 发布:简易c语言五子棋游戏 编辑:程序博客网 时间:2024/06/10 13:11
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 - ProductionSQL> 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.51 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 .
- OPTIMIZER_INDEX_COST_ADJ与成本计算
- OPTIMIZER_INDEX_COST_ADJ与成本计算
- OPTIMIZER_INDEX_COST_ADJ与成本计算作者:eygle (转)
- optimizer_index_cost_adj
- 出货与成本计算
- 成本计算
- OPTIMIZER_INDEX_COST_ADJ & RBO
- optimizer_index_caching, optimizer_index_cost_adj
- 成本计算方法
- For the parameter Optimizer_index_cost_adj
- optimizer_index_caching和optimizer_index_cost_adj
- optimizer_index_caching和optimizer_index_cost_adj
- optimizer_index_cost_adj和optimizer_index_caching
- 第二章-批量生产的产品成本计算与成本归集
- 第三章-批量生产的产品成本计算与成本归集
- 标准成本计算和平均成本计算比较
- 采用optimizer_index_cost_adj优化SQL语句
- ERP成本计算方法
- 终身受用的四个经典人生故事
- Amazon查询图书的方法
- 如何用自己的CSS替换掉Blog默认的样式(作者:雪峰)
- Oracle中临时表产生过量Redo的说明
- 如何为你的blog添加图片log
- OPTIMIZER_INDEX_COST_ADJ与成本计算
- 人生25句经典
- matlab下做com组件
- 我的emacs配置文件
- i come back
- 手工修改动网新闻.net3.0的Bug
- Amazon查询图书的方法 -利用ISBN
- 经典人生故事 1
- RMI调用模版