设为首页 加入收藏

TOP

Optimizer统计信息管理介绍(三)
2015-07-24 10:30:40 来源: 作者: 【 】 浏览:4
Tags:Optimizer 统计 信息管理 介绍
REE

DEGREE参数控制服务器并行收集统计数据的进程数。默认情况下,Oracle数据库中的所有表的DEGREE属性为1,我们可以更改这个参数值,加快统计数据的收集。当DEGREE设置值为DMBS_STATS.AUTO_DEGREE,Oracle根据并行服务器进程数参数(PARALLEL_MAX_SERVERS)值自动分配进程数收集统计信息。对一个数据量较小的对象,使用缺省值1即可。对大数据对象的可以使用DBMS_STAT.DEFAULT_DEGREE参数由数据库自动分配并行度。

示例:DEGREE=4以4个进程收集病人医嘱发送记录的统计信息。

begin

dbms_stats.gather_table_stats(ownname => 'ZLHIS',

tabname => '病人医嘱发送',

estimate_percent => 10,

method_opt => 'for all columns size skewonly',

force => true,

cascade => true,

degree => 4);

end;

l CASCADE

在系统上没有执行过索引统计信息收集。使用CASCADE选项相当于在除了收集表和列统计并同时运行 GATHER_INDEX_STATS收集索引统计信息,使用参数DBMS_STATS.AUTO_CASCADE由ORACLE确定是否收集索引统计信息要,参数设置为TRUE强制收集所有索引统计信息,在缺省情况下CASCADE参数值为FALSE

示例:强制收集病人医嘱发送上的所有索引统计信息。

begin

dbms_stats.gather_table_stats(ownname => 'ZLHIS',

tabname => '病人医嘱发送',

estimate_percent => 10,

method_opt => 'for all columns size skewonly',

force => true,

cascade => true,

degree => 4);

end;

3.2.2. 锁定和解锁一个表统计信息

在某些情况下我们需要锁定一个特定表的统计息不被更新,以保证执行计划的准确性,我们需要使用DBMS_STATS.LOCK_TABLE_STATS锁定统计信息。要锁定一个表的统计信息我们只需要传入表的拥有者和表名就可以锁定该用户表的统计信息。反之我们要解锁一个锁定的用户对象使用DBMS_STAT.UNLOCK_TABLE_STATS解锁锁定的统计信息。

示例:锁定ZLHIS用户下药品收发记录统计信息。

begin

DBMS_STATS.LOCK_TABLE_STATS(ownname =>'ZLHIS' , tabname =>'药品收发记录' );

end;

示例:解锁被锁定的ZLHIS用户下药品收发记录统计信息。

begin

DBMS_STATS.UNLOCK_TABLE_STATS(ownname =>'ZLHIS' , tabname =>'药品收发记录' );

end;

3.2.3. 删除统计信息

有的时候我们在收集了统计信息却发现新的统计信息比旧的统计信息还要差,因此我们需要将统计信息删除重新收集,以下列出删除统计信息相关过程。

名称

用途描述

DELETE_INDEX_STATS

删除特定用户下指定索引列的统计信息

DELETE_TABLE_STATS

删除特定用户指定表上表行,列和索引列的统计信息

DELETE _SCHEMA_STATS

删除特定用户所有对像的统计信息

DELETE _DICTIONARY_STATS

删除数据库所有数据字典统计信息

DELETE _DATABASE_STATS

删除数据库所有对象统计信息

示例:删除ZLHIS用户药品收发记录表统计信息

begin

DBMS_STATS.delete_table_stats(ownname =>'ZLHIS' , tabname =>'药品收发记录' )

end;

3.3. 与统计相关的视图

所有与数据表,列和索引相关的统计信息都可以通过Oracle数据库字典视图查询,常使用的视图有:

名称

用途描述

DBA_TAB_COLUMNS

ALL_TAB_COLUMNS

USER_TAB_COLUMNS

DBA视图描述数据库中所有表列。用户视图仅限于由用户拥有的表,在这些视图中统计信息有关的列由DBMS_STATS 包或ANALYZE语句生成的统计信息。

DBA_TAB_STATISTICS

ALL_TAB_STATISTICS

USER_TAB_STATISTICS

描述表的统计信息

DBA_INDEXES

ALL_INDEXES

USER_INDEXES

DBA 视图描述在数据库中的所有表上的索引。所有视图都描述在用户可访问的所有表上的索引。用户视图仅限于由用户拥有的索引。在这些视图中的统计信息有关的列包含由DBMS_STATS 包或ANALYZE语句生成的统计

在这里我们使用USER_TAB_STATISTICS视图为例先了解视图USER_TAB_STATISTICS字段的含义后,使用该视图查看表药品收发记录统计信息。

USER_TAB_STATISTICS

例名

描述

TABLE_NAME

表名

PARTITION_NAME

分区表名

PARTITION_POSITION

分区位置

SUBPARTITION_NAME

子分区表名

SUBPARTITION_POSITION

子分区位置

OBJECT_TYPE

对象类型(表,分区,子分区)

NUM_ROWS

对象中的行记录数

BLOCKS

对象使用的数据块数

EMPTY_BLOCKS

对象中的空块数

AVG_SPACE

对象中的平均可用空间

CHAIN_CNT

对象中的行连接数

AVG_ROW_LEN

对象中行记录的平均长度

AVG_SPACE_FREELIST_BLOCKS

在一个自由列表的所有块的平均可用空间

NUM_FREELIST_BLOCKS

在一个自由列表的块的数量

AVG_CACHED_BLOCKS

在缓冲区高速缓存中的平均块数

AVG_CACHE_HIT_RATIO

平均缓存对象的命中率

SAMPLE_SIZE

采样样本

LAST_ANALYZED

最后一次表分析时间

GLOBAL_STATS

没有合并的分区计算的统计?

USER_STATS

统计信息是否为用户输入

STATTYPE_LOCKED

锁定统计信息类型

STALE_STATS

统计信息是否过期

例如,我们现在查询药品收发记录的相关统计信息的行数,表分析的采样样本,统计信息是否被锁定,统计信息是否过期这几种情况,可以使用字段NUM_ROWS,SAMPLE_SIZE,LAST_ANALYZED,STATTYPE_LOCKED,STALE_STATS获取相关信息


4. 结束语

通过我们对统计的了解,已经知道统计信息对Oracle是非常重要的,它会收集数据库中对象的详细信息,并存储在相应的数据字典里。根据这些统计信息,优化器可以对每个SQL去选择最好的执行计划,统计信息收集作业由Oracle定期自动收

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇从controlfile和datafileheader上.. 下一篇showtablestatuslike'table&#..

评论

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

·C语言中,“指针”用 (2025-12-26 15:20:18)
·在c语言的指针运算中 (2025-12-26 15:20:15)
·C语言-函数指针与函 (2025-12-26 15:20:12)
·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)