您的位置:首页 > 数据库 > Oracle

ORACLE 执行计划中cost cardinality bytes cpu_cost io_cost解释

2012-02-16 11:20 876 查看
ORACLE 10G R2_执行计划中cost cardinality bytes cpu_cost io_cost解释

2009-12-29 15:42

从网上找到的资料,加上我在文档中查到的内容:

■ Cost The cost assigned to each step of the query plan by the CBO. The CBO works by

generating many different execution paths/plans for the same query and assigns a cost to

each and every one. The query plan with the lowest cost wins. In the full outer join example,

we can see the total cost for this query is 10.

■ Card Card is short for Cardinality. It is the estimated number of rows that will flow out

of a given query plan step. In the full outer join example, we can see the optimizer expects

there to be 327 rows in EMP and 4 rows in DEPT.

■ Bytes The size in bytes of the data the CBO expects each step of the plan to return.

This is dependent on the number of rows (Card) and the estimated width of the rows.

·Cardinality是指计划中这一步所处理的行数,实际是一个估算值,不准确。

·cost指cbo中这一步所耗费的资源,这个值是相对值,和cpu_cost、io_cost是有关系的。

参考《Apress.Troubleshooting.Oracle.Perforamnce》,chapter 4 system and object statistics。

cpu_cost=column_position*20(this formular is used to compute the cpu cost of accessing a column)



cost是由其他几个因素共同决定的,这里暂时不进行深入的研究。

一般情况下,在一张表只有一条记录的情况下,cpu_cost会有个初始值(常见的是2万多或3万多),随着记录的增加,cpu_cost也成比例的增加。

对于io_cost来说,如果访问的记录在一个db_block中,值是不变的。

·bytes指cbo中这一步所处理所有记录的字节数,是估算出来的一组值。

需要注意的是,在表记录数变更后,如果不执行DBMS_STATS.gather_table_stats统计的话,得到的cost等指标是不变的,也就是不准确的,只有重新统计一下表后,才能正确反应耗费的成本。

一般的,造成速度问题的,大多是I/O问题引起的,降低磁盘IO,增加缓存效率,是优化的基本技术
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: