设为首页 加入收藏

TOP

数据库性能优化、统计信息与对象统计信息概述收集、扩展统计信息、dbms_stats.get_prefs(二)
2014-11-24 01:33:44 来源: 作者: 【 】 浏览:28
Tags:数据库 性能 优化 统计 信息 对象 概述 收集 扩展 dbms_stats.get_prefs
ng of statistics

可以用如下sql来查看oracle目前收集哪些对象的统计信息:
select * from v$statistics_level
--------------------------------------------------------------------------------------------------------------------------------------
1.1 系统统计信息
除了收集数据库中所有对象的统计信息以外,oracle也可以收集数据库所在主机的统计信息,也就是os级别的统计信息。
这包括主机的cpu性能(频率),系统I/O的吞吐量等。但是,在默认情况下,oracle不会自动的收集系统统计信息。
因此,当完成数据库在服务器主机上的安装配置之后,可以考虑手动收集系统级别的统计信息。
另外,在数据库主机进行硬件升级之后,尤其是是I/O系统进行了重大升级之后,也应该再次手动收集系统级别的统计信息。
可以用如下的命令来手工完成系统统计信息的收集:
SQL> exec dbms_stats.gather_system_stats;

PL/SQL procedure successfully completed

SQL> select * from sys.aux_stats$;

SNAME PNAME PVAL1 PVAL2
--------------------------------------------------------------------------------------------
SYSSTATS_INFO STATUS COMPLETED
SYSSTATS_INFO DSTART 06-13-2014 16:52
SYSSTATS_INFO DSTOP 06-13-2014 16:52
SYSSTATS_INFO FLAGS 1
SYSSTATS_MAIN CPUSPEEDNW 1504
SYSSTATS_MAIN IOSEEKTIM 2
SYSSTATS_MAIN IOTFRSPEED 4096
SYSSTATS_MAIN SREADTIM
SYSSTATS_MAIN MREADTIM
SYSSTATS_MAIN CPUSPEED
SYSSTATS_MAIN MBRC
SYSSTATS_MAIN MAXTHR
SYSSTATS_MAIN SLAVETHR

13 rows selected

该过程中的gathering_mode参数可以用来指定收集系统统计信息的模式:
NOWORKLOAD: 无工作负载模式,用于收集系统I/O部分的统计信息。
INTERVAL: 收集某一指定时间间隔内的统计信息。
START | STOP:手动收集一段时间内的统计信息。
在12c中,又引入了EXADATA模式,用来收集类似于exadata这样具有高I/O吞吐量和吞吐能力的系统统计信息。
注:关于该过程所有参数的详细描述,请参考Oracle Database PL/SQL Packages and Types Reference 12c Release 1 (12.1)第153章。

1.2 数据库对象统计信息
除了系统级别的统计信息,oracle还会收集数据库中对象的统计信息。
不同于系统级别的统计信息,oracle默认会自动收集数据库对象的统计信息。

1.2.1 自动收集统计信息
详情参见统计信息自动收集.txt

1.2.1.1部分特例
在11g及以前版本中,创建索引的时候,由于需要进行全表扫描,因此此时Oracle顺便完成了索引的统计信息收集。而创建表时,则没有类似的动作。
在12c中,当用直接路径加载数据,例如create table as select (CTAS)和insert as select(IAS)时,Oracle也顺便搭载了统计信息
的收集工作。这就意味着,在采用这样的方式加载数据之后,不需要额外的全表扫描来收集统计信息了。

1.2.2 手动收集统计信息
1.2.2.1 DBMS_STATS相关过程
oracle的DBMS_STATS包提供了如下收集计信息的过程:
GATHER_DATABASE_STATS; 收集数据库中所有对象的统计信息
GATHER_DICTIONARY_STATS; 收集'SYS','SYSTEM'和RDBMS组件对象的统计信息
GATHER_FIXED_OBJECTS_STATS; 收集所有动态性能表的统计信息
GATHER_INDEX_STATS; 收集索引的统计信息
GATHER_PROCESSING_RATE;
GATHER_SCHEMA_STATS; 收集某一用户的所有对象的统计信息
GATHER_SYSTEM_STATS; 收集系统统计信息
GATHER_TABLE_STATS; 收集表的统计信息

1.2.2.2 统计信息内容
其中,表、列、索引统计信息分别包含如下内容:
表统计信息(user_tables/all_tables/dba_tables):
NUM_ROWS 记录行数
BLOCKS 高水位线以下的数据块数
EMPTY_BLOCKS 高水位线以上数据块数,dbms_stat不统计.
AVG_SPACE 平均空闲空间,不统计
CHAIN_CNT 行迁移行数,不统计
注:本记录实际上会记录发生行迁移或者行链接现象的所有行数,但是dbms_stats中的任意收集统计信息的过程都不处理这些信息,而只是简单的将该值置为0.可以使用
ANALYZE TABLE orders LIST CHAINED ROWS INTO chained_rows;
来获取关于行迁移和行链接的相关信息。其中chained_rows 可以通过
$ORACLE_HOME/rdbms/admin/utlchain.sql脚本来创建。
AVG_ROW_LEN 行平均长度

列统计信息(user_tab_columns):
NUM_DISTINCT 唯一值数量
LOW_VALUE 该列最小值
HIGH_VALUE 该列最大值
DENSITY 表示该列数据的重复率,0到1的小数,越接近0表示重复率越低。
NUM_NULLS 该列null值的数量
AVG_COL_LEN 列平均长度,以字节为单位
HISTOGRAM 是否有直方图统计信息,
none: 没有
frequency: 频率直方图
height balanced 高度直方图
NUM_BUCKETS 直方图桶数

索引统计信息(user_indexes):
BLEVEL 索引的深度,也就是层数
LEAF_BLOCKS 叶子块数目
DISTINCT_KEYS 索引distinct键值数目
AVG_LEAF_BLOCKS_PER_KEY 每一个键值的平均叶子块数目
AVG_DATA_BLOCKS_PER_KEY 每一个键值的平均数据块数目
CLUSTERING_FACTOR 簇聚因子 (反映行与索引键值的有序性)

注:统计信息包括但不局限于以上内容。

1.2.2.3 扩展统计信息
在数据库中,oracle默认同一个表的不同列之间,它们的关系是相互独立的。
也就是说,某一列的取值,不会影响到其他列的取值,也不会受到其他列取值的影响。
而在实际当中,往往会存在取值互相影响或者制约的列之间的关系。
比如我们有一个雇员表,其中一列为出生月份,另外一列为星座。显然这两列之间,是存在一定关系的。
为处理这样的问题,oracle引入了扩展统计信息(extension statistics)的概念。
在oracle中,此处的扩

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇全面解析Oracle数据库中管理实例.. 下一篇带你深入了解管理Oracle实例的相..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: