optimizer_index_caching和optimizer_index_cost_adj的意义
optimizer_index_caching
有些(大多数)索引位于缓冲区高速缓存中,可以使用optimizer_index_caching参数告诉oracle能够在缓冲区中找到索引块的平均百分比。默认值0认为缓冲区没有索引块。100认为全在缓冲区中。可能希望用接近于高速缓存命中率的某个值为开始调整,调整范围65-95。
optimizer_index_cost_adj
这个初始化参数代表一个百分比,取值范围在1到10000之间.该参数
表示索引扫描和全表扫描成本的比较,缺省值100表示索引扫描成本等价转换于全表扫描成本。
用来告诉oracle高速缓存多少表数据的参数。这个数越小,表访问单个块(索引扫描)的成本就越低;理解它的办法是:想象这个数反映执行多块IO(全表扫描)的成本与执行单个IO(索引扫描)的成本。默认为100,则多块IO与单块IO成本相同。设为50优化程序认为访问单块IO的成本为多块IO的一半。
小结:
这两个参数的设置不会使计划执行得更快,它只是影响选择哪个计划。
一般而言,默认的参数值很可能对系统不合适
对多数系统而言考虑如下极端情况:
optimizer_index_caching = 0 optimizer_index_cost_adj = 100 默认值,一般时候数据仓库报表系统。
optimizer_index_caching = 90 optimizer_index_cost_adj = 25 一般时候事务处理/OLTP系统。
Note: 通过 select event,average_wait from v$system_event where event like 'db file s%'
语句查询顺序读和离散读的等待值,并用 sequential reads / scattered reads 的比来作为 optimizer_index_cost_adj 的设置