OPTIMIZER_INDEX_COST_ADJ 与OPTIMIZER_INDEX_CACHING 参数说明
【部分转载】http://www.xifenfei.com/2012/06/optimizer_index_caching和optimizer_index_cost_adj参数说明.html
1、
OPTIMIZER_INDEX_COST_ADJ 参数说明
OPTIMIZER_INDEX_COST_ADJ lets you tune optimizer behavior for access path selection to be more or less index friendly—that is, to make the optimizer more or less prone to selecting an index access path over a full table scan.
The default for this parameter is 100 percent, at which the optimizer evaluates(评估) index access paths at the regular cost. Any other value makes the optimizer evaluate the access path at that percentage of the regular cost. For example, a setting of 50 makes the index access path look half as expensive as normal.
这个数反映执行多块IO(全表扫描)的成本与执行单个IO(索引读取)的成本。保持为100,则多块IO与单块IO成本相同。设为50优化程序认为访问单块IO的成本为多块IO的一半。
优化器计算通过索引扫描访问表数据的cost开销,可以通过这个参数进行调整。参数可用值的范围为1到10000。默认值为100,超过100后越大则越会使索引扫描的COST开销越高(计算的),从而导致查询优化器更加倾向于使用全表扫描。相反,值越小于100,计算出来的索引扫描的开销就越低。
OPTIMIZER_INDEX_COST_ADJ参数试验
| SQL> createtablet_xifenfei  2  as  3   selectobject_id,object_name fromdba_objects whererownum<101;Tablecreated.SQL> createindexind_t_xifenfei ont_xifenfei(object_id);Indexcreated.SQL> EXECDBMS_STATS.gather_table_stats(user,'T_XIFENFEI',CASCADE=>TRUE);PL/SQL proceduresuccessfully completed.SQL>  show parameter OPTIMIZER_INDEX;NAMETYPE                   VALUE------------------------------------ ---------------------- ------------------------------optimizer_index_caching              integer0optimizer_index_cost_adj             integer100SQL> setlinesize 150SQL> setautot trace extSQL> selectobject_name fromt_xifenfei whereobject_id>100;Execution Plan----------------------------------------------------------Plan hash value: 2444553208----------------------------------------------------------------------------------------------| Id  | Operation                   | Name| Rows| Bytes | Cost (%CPU)| Time|----------------------------------------------------------------------------------------------|   0 | SELECTSTATEMENT            |                |     1 |    11 |     2   (0)| 00:00:01 ||   1 |  TABLEACCESS BYINDEXROWID| T_XIFENFEI     |     1 |    11 |     2   (0)| 00:00:01 ||*  2 |   INDEXRANGE SCAN          | IND_T_XIFENFEI |     1 |       |     1   (0)| 00:00:01 |----------------------------------------------------------------------------------------------Predicate Information (identified byoperation id):---------------------------------------------------   2 - access("OBJECT_ID">100)SQL> altersession setOPTIMIZER_INDEX_COST_ADJ=1000;Session altered.SQL> selectobject_name fromt_xifenfei whereobject_id>100;Execution Plan----------------------------------------------------------Plan hash value: 548923532--------------------------------------------------------------------------------| Id  | Operation         | Name| Rows| Bytes | Cost (%CPU)| Time|--------------------------------------------------------------------------------|   0 | SELECTSTATEMENT  |            |     1 |    11 |     3   (0)| 00:00:01 ||*  1 |  TABLEACCESS FULL| T_XIFENFEI |     1 |    11 |     3   (0)| 00:00:01 |--------------------------------------------------------------------------------Predicate Information (identified byoperation id):---------------------------------------------------   1 - filter("OBJECT_ID">100) | 
通过试验证明修改OPTIMIZER_INDEX_COST_ADJ会导致执行计划走index还是全表扫描
2、
OPTIMIZER_INDEX_CACHING参数说明
OPTIMIZER_INDEX_CACHING lets you adjust the behavior of cost-based optimization to favor nested loops joins and IN-list iterators.The cost of executing an index using an IN-list iterator or of executing a nested loops join when an index is used to access the inner table depends on the caching of that index in the buffer cache. The amount of caching depends on factors that the optimizer cannot predict, such as the load on the system and the block access patterns of different users.You can modify the optimizer’s assumptions about index caching for nested loops joins and IN-list iterators by setting this parameter to a value between 0 and 100 to indicate the percentage of the index blocks the optimizer should assume are in the cache. Setting this parameter to a higher value makes nested loops joins and IN-list iterators look less expensive to the optimizer. As a result, it will be more likely to pick nested loops joins over hash or sort-merge joins and to pick indexes using IN-list iterators over other indexes or full table scans. The default for this parameter is 0, which results in default optimizer behavior.
这个表明的是在nested loops joins and IN-list iterators的时候,如果使用了OPTIMIZER_INDEX_CACHING参数,表明两个表关联的时候优化器考虑index cache的比例,从而选择不同的执行计划.而不是网上所说的优化器考虑所有情况下的index的cache情况(这个参数只有在nested loops joins and IN-list iterators表关联的时候的index才会被优化器考虑[index cache的比例]).进一步说明:这个参数影响两个表关联的时候是选择hash jion还是nested loops joins/sort-merge joins。
如下是tomkyte书中的描述:
可以使用 OPTIMIZER_INDEX_CACHING参数告诉oracle能够在缓冲区高速缓存中找到的索引块的平均百分比,0默认值使oracle 认为高速缓存中没有索引块。最大值100使oracle认为高速缓存中具有所有索引块。所要使用的值很难精确指定,但它一定是0到100之间的某个值。你可能希望用接近于高速缓存命中率的某个值作为开始,然后不断调整看其对系统的作用如何。
对于许多系统,应该考虑设置这两个参数为非默认值,或者至少测试一下两种极端情形:
OPTIMIZER_INDEX_CACHING = 0 和 OPTIMIZER_INDEX_COST_ADJ = 100 的默认设置。它们一般适合与许多数据仓库/报表系统。
OPTIMIZER_INDEX_CACHING = 90 和 OPTIMIZER_INDEX_COST_ADJ = 25 的设置。它们一般适合于许多事物处理/OLTP系统。
OPTIMIZER_INDEX_COST_ADJ 与OPTIMIZER_INDEX_CACHING 参数说明的更多相关文章
- db file sequential read等待事件 --转载
		db file sequential read db file sequential read等待事件有3个参数:file#,first block#,和block数量.在10g中,这等待事件受到用户 ... 
- 关于Optimizer_index_cost_adj参数的设置
		Thomas建议:对于许多系统,应到考虑设置这两个参数为非默认值,至少测试一下两种极端情形: 1. optimizer_index_caching=0 和 optimizer_index_cost_a ... 
- 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明
		1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制 一.综述 SuperIO(SIO)定位 ... 
- JQuery UI dialog 弹窗实例及参数说明
		按钮代码: <a id="suprise" style="margin-left: 0.5em;cursor:pointer;">点我会有惊喜< ... 
- 服务器.htaccess 详解以及 .htaccess 参数说明(转载)
		htaccess文件(或者”分布式配置文件”)提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.作为用户,所能使用的命令受到限 ... 
- Mongodb启动命令mongod参数说明
		Mongodb启动命令mongod参数说明 mongod的主要参数有: 基本配置 ----------------------------------------------------------- ... 
- Connect to Database Using Custom params链接数据库配置参数说明
		使用RF的关键字Connect to Database Using Custom params链接数据库,对应的参数说明: a) 第一个参数我使用的是cx_Oracle,就写这个 b) ... 
- .htaccess详解及.htaccess参数说明【转】
		目录(?)[-] htaccess 详解 htaccess rewrite 规则详细说明 RewriteEngine OnOff RewriteBase URL-path RewriteCond Te ... 
- 转载《SimpleAdapter的参数说明》
		SimpleAdapter的参数说明 第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要 第二个参数表示生成一个Map(String ,Object)列表选项 第三个参数表示界 ... 
随机推荐
- 关于MVC的感悟
			代码一定要静下心来自己琢磨感悟,才会发现一些细节,只注重实现的结果是要不得的. 室友有些奋进,我得努力啊! 
- VS2012使用验证控件出现[ASP.NET]WebForms UnobtrusiveValidationMode 需要 'jquery' 的 ScriptResourceMapping。請加入 ScriptResourceMapping 命名的 jquery (區分大小寫)。的解决办法。
			方法一:在webconfig中找到 <appSettings><add key="aspnet:UseTaskFriendlySynchronizationContext& ... 
- [PHP]算法-二叉树中和为某一值的路径的PHP实现
			二叉树中和为某一值的路径: 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的li ... 
- 了解java虚拟机—在TALB上分配对象(10)
			由于对象一般会分配在堆上,而堆是全局共享的.因此在同一时间,可能有多个线程在堆上申请空间.每次对象分内都必须要进行同步,因此TLAB这种线程专属的区域来避免多线程冲突.TLAB本身占用了eden区的空 ... 
- Web应用架构入门之11个基本要素
			译者: 读完这篇博客,你就可以回答一个经典的面试题:当你访问Google时,到底发生了什么? 原文:Web Architecture 101 译者:Fundebug 为了保证可读性,本文采用意译而非直 ... 
- JS中实现跨域的方法总结
			今天早上在地铁看了点基础知识的考察题,看到了一个JS跨域的问题,仔细想了想自己脑子里竟然只剩下jsonp跨域和用nginx反向代理进行跨域,想着还有别的几种方法,就是想不起来,这个人呢,一上岁数这个脑 ... 
- 【代码笔记】Web-HTML-头部
			代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!--ti ... 
- 可视化接口管理工具RAP,模拟数据,校验接口
			最近看到一个不错的接口管理的工具,分享一下 RAP ppt介绍:http://www.imooc.com/video/11060 RAP是一个可视化接口管理工具 通过分析接口结构,动态生成模拟数据,校 ... 
- Fiddler 使用fiddler发送捕获的请求及模拟服务器返回
			使用fiddler发送捕获的请求及模拟服务器返回 by:授客 QQ:1033553122 1.做好相关监听及代理设置 略 2.发送捕获的请求 如图 3.模拟服务器返回 本例的一个目的是,根据服务器返回 ... 
- Django中ORM介绍和字段及字段参数    Object Relational Mapping(ORM)
			Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ... 
