OracleOptimizer:迁移到使用基于成本的优化器-----系列1.2

发表于:2007-05-25来源:作者:点击数: 标签:
Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.2 3.2基于成本的优化器(CBO) 基于成本优化器遵循计算代价的方法学。所有的执行计划随成本标识,优化器选择成本最低的一个。在执行计划中,较高的成本将意味着较高的资源。成本越低,对查询来说越高效

Oracle Optimizer:迁移到使用基于成本的优化器-----系列1.2

3.2基于成本的优化器(CBO)

基于成本优化器遵循计算代价的方法学。所有的执行计划随成本标识,优化器选择成本最低的一个。在执行计划中,较高的成本将意味着较高的资源。成本越低,对查询来说越高效。
CBO使用所有存储在数据字典中可用的统计资料信息和柱状图,用户提供提示和的参数设置来达成使用的成本,CBO生成所有可能访问方法的排列然后选择最合适的。排列的数量依赖于查询中出现的表数量,有时能达到约80,000个排列甚至更多,请参考系列的第二部分参数章节来设置相关参数。
CBO也可能完成诸如查询转换、视图合并或转换的操作,增加join谓词等等。
这将改变原始语句并改变正存在或者是新添加的谓词,得自新的访问计划的所有的这些目的会比原来存在的好些。注意转换并不影响返回的数据,而仅仅是执行路径,请参考系列第二部分参数章节相关联的信息。

3.2.1统计资料

统计资料按顺序提供了准确的输入以供CBO正常工作;生成的数据存储在对象中并且包括诸如表中行的数量、列中单一值、索引中页的块数等等信息。统计资料越准确,优化器提供的结果越高效。请参考本系列第三部分生成统计资料章节中怎样生成这些信息和如何最好地维持它。统计资料可能是精确的或估计的,它用COMPUTE 子句分析在对象中所有的数据,它将给优化器精确的信息以工作并且达到完美的执行计划。
用ESTIMATE子句,将会分析在对象中提及的样本大小的数据内容从而生成统计资料,样本大小会被指定成随机分析的行的数量或者行的百分比从而生成统计资料,也可以指定可选的块样例,如果系统中存在巨额表数据,它将节约时间。
好的执行计划的前提依赖于估计值和精确值有多接近,可以试验一下设置不同的样本大小来达到适合的目标或对不同类型的表产生不同的评估级别,这种思想对达到接近精确统计是相当可行的。
统计资料存储在所有者为SYS用户的数据词典中,下面的视图显示了表、列,索引的收集统计信息.
表:
DBA_TABLES

NUM_ROWS –行的数量
BLOCKS – 已用的块数量
EMPTY_BLOCKS –未使用的空块数量
AVG_SPACE – 分配给表的平均自由空间(以字节计),考虑所有空的和自由的块.
CHAIN_CNT – 链连或移动的行的数量
AVG_ROW_LEN –以字节计的平均行的长度
LAST_ANALYZED – 上次表分析的日期
SAMPLE_SIZE –提供给ESTIMATE统计的样本大小,对于COMPUTE则等于NUM_ROWS列的值.
GLOBAL_STATS –对于分区表, YES –收集统计资料将作为一个整体, NO –收集统计资料将估计表
USER_STATS –如果用户指明为表设置统计,则为YES
对于一个表的单独分区的统计资料从DBA_TAB_PARTITIONS可以找到,簇统计资料从DBA_CLUSTERS可以找到.

DBA_TAB_COLUMNS
NUM_DISTINCT – 单一值的数量
LOW_VALUE –最小值
HIGH_VALUE – 最高值
DENSITY – 列的聚集度.
NUM_NULLS –涉及列空值的记录数
NUM_BUCKETS – 柱状图中柱的数量,参考柱状图章节
SAMPLE_SIZE –ESTIMATE统计提供的样本大小,如果是COMPUTE则等于全部行数
LAST_ANALYZED -上次表分析的日期
DBA_TAB_COL_STATISTICS 显示相似的数据,–对于分区表列统计资料从DBA_PART_COL_STATISTICS和DBA_SUBPART_COL_STATISTICS可以找到
索引
DBA_INDEXES
BLEVEL –索引的深度,从根级到叶级
LEAF_BLOCKS –页级块的数量.
DISTINCT KEYS – 单一键值的数量
AVG_LEAF_BLOCKS_PER_KEY –每一个单一键值出现的平均数量对于独特索引应该为1
AVG_DATA_BLOCKS_PER_KEY –单一键值指向的表中块的平均数量
CLUSTERING_FACTOR –决定行按索引排序的总数.如果数量靠近块的数量,则该表是按照索引顺序排序的,也就是说,页未级的的全部指向表中同一块的行.如果索引与行数接近,索引会随机排序, 也就是说, 页未级的的全部是分散指向MILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">多个块的行。  
NUM_ROWS – 索引行数
SAMPLE_SIZE - ESTIMATE统计提供的样本大小,如果是COMPUTE则等于全部行数
LAST_ANALYZED -上次表分析的日期
GLOBAL_STATS对于分区表, YES –收集统计资料将作为一个整体, NO –收集统计资料将估计表
USER_STATS如果用户指明为表设置统计,则为YES
PCT_DIRECT_ACCESS –索引组织表的次要索引,有效猜测行的百分比
单一分区索引统计可从DBA_IND_PARTITIONS 和DBA_IND_SUBPARTITIONS找到
涉及到柱状图信息的数据词典以后将会讨论. (待续)

原文转自:http://www.ltesting.net