欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle 收集对象统计信息

程序员文章站 2022-06-02 21:03:03
...

Oracle9i之前,由DBA负责收集对象统计信息。默认情况下,数据库不提供对象统计信息。到了oracle10g,在创建数据库的时候,就创建

一. 概述

Oracle9i之前,由DBA负责收集对象统计信息。默认情况下,数据库不提供对象统计信息。到了oracle10g,在创建数据库的时候,就创建了一个定期收集对象统计信息的作业并进行调度。以便拥有最新的对象统计信息,因为表时刻都在变化,假如某一时刻插入了数据,对象统计信息也需要更新的。

二. 收集对象

oracle是用工具包dbms_stats来收集统计信息,根据不同的用途,收集对象也不相同。可以针对整个数据库,数据字典,用户或者单个表,索引进行收集。如下所示:

gather_database_stats:收集数据库对象统计信息

gather_dictionary_stats:收集数据字典对象统计信息

gather_schema_stats:收集整个模式的所有对象统计信息

gather_table_stats:收集表的对象统计信息

gather_index_stats:收集索引的对象统计信息

三. 参数说明

针对不同的收集对象,有不同的参数,如下图:

Oracle 收集对象统计信息

参数可以被分为3类:指明目标对象,指明收集选项和指明覆盖当前统计信息之前是否备份

1. 目标对象

用来指定要收集统计信息的对象。

ownname:模式名称(也就是用户名)

indname:索引名称

tabname:表名称

partname:分区或者子分区名称,不指定的话收集所有分区,默认为null

comp_id:组件ID

granularity:分区对象的统计级别,可接受值如下图,到oracle9i为止,默认值为default,从oracle10g开始默认值为auto

Oracle 收集对象统计信息

cascade:是否收集索引的统计信息,可接受true,false和dbms_stats.auto_cascade(一个常量,取值为null,意思是让数据库引擎决定是否收集)。oracle9i之前默认值为false,从oracle10g开始默认值为dbms_stats.auto_cascade。

gather_sys:是否收集sys用户的统计信息,可接受true,false。默认值为false。

gather_temp:是否收集临时表的统计信息,可接受true,false。默认值为false。

options:处理对象以及处理方式

objlist:根据参数options的不同值,返回被处理对象的列表。

force:是否覆盖锁定对象信息

obj_filter_list:根据条件进行统计对象信息,,比如只统计以C打头的表的统计信息。

2. 收集选项

指明收集统计信息的方式,收集哪类列的统计信息,以及与之相关的SQL游标是否失效。

estimate_percent:是否采样收集统计信息,可用值从0.000001到100的一个百分比值。100等同于NULL,表示不采样收集。需要理解一点,这个参数仅指定采样的最小百分比,如果数据库觉得这个取值太小,会自动增大该值。oracle9i之前默认值为NULL,oracle10g默认为dbms_stats.auto_sample_size(一个常量,为0,表示由存储过程决定采样大小),要加速统计过程,可取一个较小的采样值,比如0.5%或者0.1%。

block_sample:是否采用数据块采样(非数据块采样就是数据行采样),数据块采样更快速,数据行采样更准确。只有确信数据是随机均匀分布的,才可以使用数据块采样。TRUE:数据块采样,FALSE:数据行采样,默认FALSE。

method_opt :是否收集直方图统计信息,如果收集,采样的最大桶数。可取值如下:

NULL或者空字符串:只收集列统计信息,不收集直方图统计信息。

收集列统计信息和所有列的直方图统计信息,比如:for all columns size 200,表示对每一列最多采样200个桶。

只收集某一些列的直方图统计信息,比如:for columns size 200 col1,col2,col3,col4 size 1,col5 size 1。只对这5列收集直方图信息,而且只对前3列最多采样200个桶。

oracle9i默认值为 for all columns size 1,oracle10g后默认值为 for all columns size auto。

degree:对象统计时所用的从属进程数量,默认值为null

no_invalidate:与收集的对象相关的游标是否失效,可用值为true,false和dbms_stats.auto_invalidate。oracle9i默认值为false(相关游标立即失效),oracle10g之后默认为dbms_stats.auto_invalidate(游标过一段时间失效,避免集中重新解析游标)

Oracle 收集对象统计信息