Cost 计算方法

本文深入探讨了《基于成本的Oracle优化法则》一书中关于索引访问路径的流程,包括为索引列准备谓词、定位索引rootblock、遍历leaflist等关键步骤,并详细解释了索引访问成本的计算公式及其背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:

http://valen.blog.ccidnet.com/blog-htm-do-showone-uid-51502-type-blog-itemid-207620.html

 

读书心得《基于成本的Oracle优化法则》4章 索引访问路径的流程:

1. 为索引列准备谓词

2. 定位索引root block

3. 沿着 branch level 到leaf block,寻找start key

4. 遍历leaf list,获得和谓词匹配的stop key

5. 决定是否根据rowid访问table block


索引访问的成本公式:
Cost =
Blevel + (解释:索引高度)
Ceiling(leaf_blocks * effective index selectivity) +(解释:叶块×索引选择率)
Ceiling(clustering_factor * effective table selectivity) (解释:集群因素×表选择率)


有效索引选择率:
Selectivity(P and Q) = selectivity(P) * selectivity(Q)
有效表选择率
如果优化器觉得所有谓词都是基于索引的扫描,那么表扫描率就=索引扫描率
集群因素 CLUSTER_FACTOR

一个TABLE的CLUSTER_FACTOR越好,那么它越接近块数,反之则接近行数。我现在就知道 (clustering_factor * effective table selectivity)的含义了,因为优化器每次访问一个不同的块时,都需要一个新的I/O。重建索引可以减少leaf block,但是它对cluster factor无效。

 

根据索引COST计算公式:
cost = (cost(INDEX RANGE SCAN)+cost(TABLE ACCESS BY INDEX ROWID)) * optimizer_index_cost_adj%
cost = blevel +ceiling(leaf_blocks * effective index selectivity) +  -- cost(INDEX RANGE SCAN)
ceiling(clustering_factor * effective table selectivity)        --cost(TABLE ACCESS BY INDEX ROWID)

select LEAF_BLOCKS,distinct_keys,clustering_factor,num_rows from  dba_IND_STATISTICS WHERE table_name=xxxxxx' and index_name='IND_xxx';

select 2+ceil(220102*0.0191515683)+ceil(61714021*0.0191515683) from dual;
1186139

 

 

### OSPF 协议中的 Cost 计算方法 OSPF 使用 Cost 作为路由度量值,其核心目标是最短路径优先算法 (SPF Algorithm),即通过计算最低累积成本来决定最佳路径。Cost 的具体计算公式如下: #### 默认情况下: \[ \text{Cost} = \frac{\text{Reference Bandwidth}}{\text{Interface Bandwidth}} \] 其中, - **Reference Bandwidth** 是参考带宽,默认值为 \(10^8\) bps(即 100 Mbps)。可以通过命令 `auto-cost reference-bandwidth` 修改该值[^1]。 - **Interface Bandwidth** 表示接口的实际带宽。 因此,在默认配置下,如果某个接口的带宽为 1 Gbps,则对应的 Cost 值可以计算为: ```plaintext Cost = 100 / Interface_Bandwidth_in_Mbps ``` 对于更高带宽的情况,可能需要调整 Reference Bandwidth 来适应现代高带宽环境。例如,设置 Reference Bandwidth 为 10000(对应 10 Gbps),则新的 Cost 计算公式变为: \[ \text{Cost} = \frac{10^{10}}{\text{Interface Bandwidth in bits per second}} \] #### 手动指定 Cost 值 除了自动计算外,管理员也可以手动设定特定接口的 Cost 值。这通常通过以下命令完成: ```plaintext interface GigabitEthernet0/0 ip ospf cost <value> ``` 这种方式允许更灵活地控制流量分布,而不依赖于实际带宽。 --- ### 影响 OSPF Cost 值的因素 以下是影响 OSPF 路由开销的主要因素: 1. **接口带宽**: 如前所述,默认情况下 Cost 与接口带宽成反比关系[^5]。 2. **Reference Bandwidth 配置**: 如果修改了全局参考带宽参数,则会直接影响所有接口的 Cost 计算结果。 3. **手工配置**: 当管理员显式设置了某条链路上的 Cost 值时,它将覆盖基于带宽的自动计算结果。 4. **网络设计需求**: 在某些复杂拓扑结构中,为了实现负载均衡或多路径冗余,可能会人为调整部分链路的成本以优化数据流方向。 --- ### 示例代码展示如何更改参考带宽并验证效果 假设希望支持更高的物理链路速度,可执行下列操作步骤之一: ```cisco-ios router ospf 1 auto-cost reference-bandwidth 10000 ``` 此命令将把参考带宽提升至 10Gbps 水平之后重新加载设备再观察各端口的新COST数值变化情况即可. ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值