关于Optimizer_index_cost_adj参数的设置
Thomas建议:
对于许多系统,应到考虑设置这两个参数为非默认值,至少测试一下两种极端情形:
1. optimizer_index_caching=0 和 optimizer_index_cost_adj=100的默认值. 他们一般适用于许多数据仓库/报表系统
2. otpimizer_index_caching=90和optimizer_index_cost_adj=25的设置,他们一般适用于许多事物处理系统/oltp系统.
对于数据仓库和DSS系统要反复调整来取一个合理值。
Oracle在选择不同的访问路径时,会对全表扫描和索引扫描进行比较评估,在比较的时候,
Oracle会把索引扫描的成本转换为全表扫描的成本,和全表扫描的COST进行比较。这个转换需要一个转换因子,就是Optimizer_index_cost_adj;
Optimizer_index_cost_adj*(index scan cost)=等价的Full Scan cost
所以 optimizer_index_cost_adj = Full Scan Cost / Index Scan Cost
在缺省情况下:Optimizer_index_cost_adj=100
SQL> show parameter optimizer_index_cost_adj
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_index_cost_adj integer 100
SQL> create table t3 as select * from dba_objects;
Table created
SQL>
SQL> create index ind_owner on t3(owner);
Index created
SQL> analyze table t3 compute statistics;
SQL> set autotrace on
SQL> set timing on
SQL> set autotrace traceonly
SQL> alter session set optimizer_index_cost_adj=43;
Session altered.
select /*+ FULL(t3)*/* from bia_stg.t3 t3 where owner='BIA_STG';
322 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 2574254479
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3044 | 255K| 130 (2)| 00:00:02 |
|* 1 | TABLE ACCESS FULL| T3 | 3044 | 255K| 130 (2)| 00:00:02 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OWNER"='BIA_STG')
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
739 consistent gets
0 physical reads
0 redo size
23185 bytes sent via SQL*Net to client
700 bytes received via SQL*Net from client
23 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
322 rows processed
SQL> select /*+ index(t3 ind_owner)*/* from bia_stg.t3 t3 where owner='BIA_STG';
322 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 2790462862
--------------------------------------------------------------------------------
---------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| T
ime |
--------------------------------------------------------------------------------
---------
| 0 | SELECT STATEMENT | | 3044 | 255K| 89 (0)| 0
0:00:02 |
| 1 | TABLE ACCESS BY INDEX ROWID| T3 | 3044 | 255K| 89 (0)| 0
0:00:02 |
|* 2 | INDEX RANGE SCAN | IND_OWNER | 3044 | | 8 (0)| 0
0:00:01 |
--------------------------------------------------------------------------------
---------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("OWNER"='BIA_STG')
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
65 consistent gets
0 physical reads
0 redo size
23185 bytes sent via SQL*Net to client
700 bytes received via SQL*Net from client
23 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
322 rows processed
optimizer_index_cost_adj = Full Scan Cost / Index Scan Cost* 100=130/89 * 100=1.460 * 100
=146
及optimizer_index_cost_adj调整为147
关于Optimizer_index_cost_adj参数的设置的更多相关文章
- in_array 的第三个参数strict设置为 true
var_dump(in_array(0, array('s' )); 这句话的结果是bool(true). 因为in_array会将0 和's' 进行比较,0是number类型,'s'是string类 ...
- 如何把in_array 的第三个参数strict设置为 true
var_dump(in_array(0, array('s' )); 这句话的结果是bool(true). 因为in_array会将0 和's' 进行比较,0是number类型,'s'是string类 ...
- web.xml中servlet初始化参数的设置
<context-param><param-name>param1</param-name><param-value>value1</param- ...
- 关于MySql链接url参数的设置
jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=t ...
- [Oracle][Standby][PDB]在PDB中修改参数,设置范围为 SPFILE,报 ORA-65099错误
[Oracle][Standby][PDB]在PDB中修改参数,设置范围为 SPFILE,报 ORA-65099错误 在Data Gaurd 的 Standby (或 CDB 是 Read Only ...
- 内核参数SEMMSL SEMMNS SEMOPM SEMMNI参数的设置
内核参数SEMMSL SEMMNS SEMOPM SEMMNI参数的设置 转自:http://www.dbafree.net/?p=92 这四个参数自己一直没搞清楚 今天问了下同事,大概整了一下 ...
- LoadRunner中参数的设置
LoadRunner中参数的设置 参数个数:10个 tester1.tester2.tester3…tester10 迭代次数:2次 场景设置(一):Sequential+Each Iteration ...
- javabean 参数收集 设置属性 设置不同级别的域对象的属性 默认存储在pagecontext中
javabean 参数收集 设置属性 设置不同级别的域对象的属性 默认存储在pagecontext中
- setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位
setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位
随机推荐
- C++专题 - WPS是什么
WPS,1988年诞生自一个叫求伯君的24岁年轻人之手,市场占有率一度超过90%,这个产品也成就了这个年轻人.在中国大陆,金山软件公司在政府采购中多次击败微软公司,中国大陆很多政府机关部门.企业都装有 ...
- JSONP技术原理及实现
跨域问题一直是前端中常见的问题,每当说到跨域,第一浮现的技术必然就是JSONP JSONP在我的理解,它并不是ajax,它是在文档中插入一个script标签,创建_callback方法,通过服务器配合 ...
- java设计模式和设计原则
一.创建型模式 1.抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2.生成器模式(Builder patter ...
- 使用sprintf打印float并控制小数位数时引起的问题
最近在做项目中发现一个Bug,直接把进程搞死,查了一下,居然是一个最不起眼的地方导致的,在此记录一下. 先看下面代码 #include <iostream> #include <st ...
- Linux下追踪函数调用,打印栈帧
事情的起因是这样的,之前同事的代码有一个内存池出现了没有回收的情况.也就是是Pop出来的对象没有Push回去,情况很难复现,所以在Pop里的打印日志,跟踪是谁调用了它,我想在GDB调试里可以追踪调用的 ...
- 在本地Apache服务器配置虚拟主机站点
Apache 配置localhost虚拟主机步骤1,打开apache目录下httpd.conf文件,找到如下模块 # Virtual hosts #Include conf ...
- CSS中:nth-child和JQuery:eq的区别
$("li:nth-child(n)")选择器与$("li:eq(n)")选择器的不同之处在于:$("li:eq(n)")选择器只匹配一个元 ...
- yii1.1.15 accessRules的一个小bug
public function accessRules() { return array( array( 'allow', 'actions'=>array('ajaxChangeImage', ...
- iscroll横向滑动(当前页状态标记自动变化)
var myScroll; function loaded(){ myScroll = new iScroll('wrapper',{ snap:true, checkDOMChanges:true, ...
- 设置(TableViewController)通用框架
本文学习于传播播客.李明杰老师.感谢