Oracle统计信息

统计信息概念及分类

Oracle统计信息是存储在数据字典里的一组数据,从多个维度描述了oracle数据库里对象的详细信息。CBO会利用这些统计信息来计算目标SQL各种可能的、不同的执行路径成本,并从中选择一条成本值最小的执行路径来作为目标SQL的执行计划

oracle数据库里的统计信息分为以下6种类型:

  • 表的统计信息:描述表的详细信息,如记录数、表块(表里的数据块数量)的数量、平均行长度等
  • 索引的统计信息:描述索引的详细信息,如索引的层级、叶子块的数量、聚簇因子等
  • 列的统计信息:描述列的详细信息,如列的distinct值的数量、列的null值数量、列的最小最大值及直方图
  • 系统统计信息:描述数据库服务器的系统处理能力,包含了CPU和I/O这两个维度,借助于系统统计信息,oracle可以更清楚地知道目标数据库服务器的实际处理能力
  • 数据字典统计信息:描述数据字典基表(如TAB$、IND$等)、数据字典基表上的索引,以及这些数据字典基表的列的详细信息,描述上述数据字典基表的统计信息与描述普通表、索引、列的统计信息没有本质区别
  • 内部对象统计信息:描述oracle数据库里的一些内部表(如X$系列表)的详细信息,它的维度和普通表的统计信息的维度类似,只不过其表块的数量为0,因为X$系列表实际上只是oracle自定义的内存结构,并不占用实际的物理存储空间

 

收集与查看方法

1. 推荐使用DBMS_STATS包收集统计信息

dbms_stats.gather_table_stats
dbms_stats.gether_index_stats
dbms_stats.gather_schema_stats
dbms_stats.gather_database_stats

exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'T2',estimate_percent=>15,method_opt=>'FOR TABLE',cascade=>false);--估算模式,采样比例15%

2. DBMS_STATS包相对于ANALYZE的优势

  • ANALYZE命令不能正确地收集分区表的统计信息,而DBMS_STATS包可以。ANALYZE只会收集最低层次对象的统计信息,然后推到和汇总出高一级的统计信息,比如对于有子分区的分区表而言,它只会先收集子分区统计信息,然后再汇总、推导出分区和表级的统计信息。有的统计信息是可以从当前对象的下一级对象进行汇总后得到的,比如表的总行数,可以由各分区的行数相加得到。但有的统计信息则不能从下一级对象得到,比如列上的distinct值数量NUM_DISTINCT以及DENSITY等。
  • ANALYZE命令不能并行收集统计信息,而DBMS_STATS包可以。精确收集数据量很大的表的统计信息时,并行更省时。

3. 查看统计信息:表级别DBA_TABLES、分区级别DBA_TAB_PARTITIONS、子分区级别DBA_TAB_SUBPARTITIONS统计信息

或者执行脚本sosi.txt  http://www.dbsnake.net/books

 

表的统计信息

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值