The DBMS_STATS subprograms perform the following general operations:
The DBMS_STATS subprograms perform the following general operations:
第一部分:
Gathering Optimizer Statistics
1.GATHER_DATABASE_STATS
收集数据库中所有对象的统计信息
Parameters:
--estimate_percent:
需分析的百分比
(NULL means compute)
,默认值可以通过
SET_PARAM
来改变。
The valid range is [0.000001,100]
-
-block_sample:
无论是否是随机块采样替代随机行采样,随机块采样的效率都会比较高。除非数据不是随机分布在磁盘上的。
DEFAULT FALSE
--method_opt:
size_clause is defined as size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}
- integer : Number of histogram buckets. Must be in the range [1,254].- REPEAT : Collects histograms only on the columns that already have histograms.- AUTO : Oracle determines the columns to collect histograms based on data distribution and the workload of the columns.- SKEWONLY : Oracle determines the columns to collect histograms based on the data distribution of the columns.
The default is FOR ALL COLUMNS SIZE AUTO. 默认值可以通过SET_PARAM来改变
--degree
:并行度 ,The default for degree is NULL.
--granularity:
只有分区表才会用到此参数
--cascade:
是否要统计此表上的index,默认为false, 默认值可以通过SET_PARAM来改变
--Stattab
:
User statistics table identifier describing where to save the current statistics.
--Statid:
Identifier (optional) to associate with these statistics within stattab
.
--options:
默认值
GATHER(
Gathers statistics on all objects in the schema),
其它选项:
GATHER
AUTO
: Gathers all necessary statistics automatically
GATHER
STALE
: Gathers statistics on stale objects as determined by looking at the *_tab_modifications
views.
GATHER
EMPTY
: Gathers statistics on objects which currently have no statistics.
LIST AUTO
: Returns a list of objects to be processed with GATHER AUTO
When
GATHER AUTO
is specified, the only additional valid parameters are stattab
, statid
, objlist
and statown
;
LIST
STALE
: Returns a list of stale objects as determined by looking at the *_tab_modifications
views.
LIST
EMPTY
: Returns a list of objects which currently have no statistics.
--objlist:
List of objects found to be stale or empty
--statown:
Schema containing stattab
(if different from current schema)
--gather_sys:
Gathers statistics on the objects owned by the 'SYS'
user,默认值TRUE
--no_invalidate:
设置为TRUE时,相关的游标不会失效;反之,游标失效。
2. GATHER_DICTIONARY_STATS
此过程收集统计数据字典用户’SYS’,’SYSTEM’以及RDBMS组件用户.
必须有SYSDBA或ANALYZE
ANY
DICTIONARY
和 ANALYZE
ANY
SYSTEM
权限才能执行此过程。
参数:
--comp
_id
:
指定需统计用户的COMP_ID,通过DBA_REGISTRY视图来查看COMP_ID。如此值为NULL,则统计所有RDBMS组件的用户。此管是否有此参数,’SYS’,’SYSTEM’用户都会被统计。
其它参数
estimate_percent
--
block_sample --method_opt –degree –granularity –cascade –stattab –statid –options –objlist –statown --no_invalidate
都同上
3. GATHER_FIXED_OBJECTS_STATS
此过程收集统计所有的动态性能表
必须有SYSDBA或具有ANALYZE
ANY
DICTIONARY
权限才能执行此过程。
参数:stattab –
statid –
statown --
no_invalidate
4. GATHER_INDEX_STATS
此过程收集索引的统计。一些参数被限制的,不会并行处理cluster indexes, domain indexes,和bitmap join indexes,granularity 和 no_invalidate参数在这些index中不起作用。
参数:
--ownname
:被统计的schema
-- indname
:
index名
--Partname
:
Name of partition
--force
:
即使表被锁定,也强行统计
--estimate_percent –stattab –statid –statown –degree –granularity --no_invalidate
都同上
5. GATHER_SCHEMA_STATS
此过程收集统计某用户下所有的对象
参数:
--own
name
:
需分析的schema, null时则为当前schema
--estimate_percent --block_sample --method_opt –degree –granularity –cascade –stattab –statid –options –objlist –statown --no_invalidate
都同上
6. GATHER_SYSTEM_STATS
此过程收集系统统计,用来系统的cpu和IO指标
参数:
--gathering_mode:
--NOWORKLOAD,
收集I/O的性能指标,数据库的大小决定收集时间。收集期间ORACLE将评估IO平均的读取寻道时间和传输速度。
--INTERVAL
,
指定统计的时间(分钟数),统计完成后,统计信息将建立或更新在数据字典或指定的stattab中。在统计期间可以用GATHER_SYSTEM_STATS (gathering_mode=>'STOP')来中断统计。
SQL> exec dbms_stats.gather_system_stats('interval',15);
SQL> exec dbms_stats.gather_system_stats('stop');
SQL>select pname,pval1 from sys.aux_stats$; --查看统计结果
--START
| STOP
:开始和结束统计
--interval:
指定统计的分钟数,当上面的参数是INTERVAL时才用此参数
--no_invalidate:
设置为TRUE时,相关的游标不会失效;反之,游标失效。
–statid –statown
同上
7. GATHER_TABLE_STATS
此过程统计table and column (and index)信息。
参数:
Ownname
:
用户名
Tabname
:
TABLE名
Partname
:分区名
Name of partition
--estimate_percent --block_sample --Method_opt –degree –granularity –cascade –stattab –statid –statown --no_invalidate --force
都同上
第二部分:
Setting or Getting Statistics
1. SET_COLUMN_STATS
设置列相关信息
参数:
--ownname
:
用户名
--tabname
:
TABLE名
--colname
:
列名
--partname
:
分区名
--stattab
:
指定存放用户分析的数据的表名
--statid:
stattab的ID,只有当stattab没有指定时使用
--ext_stats:
自定义的统计
--stattypown:
统计类型的所属用户
--STATTYPNAME
:统计类型的名称
--distinct:
有多少个值 (number of distinct values)
--density:
列密度。如果此值是null且distinct不为空,那么此值将参照distinct
--nullcnt
:number of NULLS
--srec:
StatRec
structure filled in by a call to PREPARE_COLUMN_VALUES or GET_COLUMN_STATS
--avgclen
:
列的平均长度(in bytes)
--flags
:
ORACLE内部使用,应该为NULL
--statown:
Schema containing stattab (if different than ownname)
--no_invalidate
:
设置为TRUE时,相关的游标不会失效;反之,游标失效。
--force
:
被设置的column被锁时也强行设置
2. SET_INDEX_STATS
设置索引相关信息
3. SET_PARAM
此过程是用来设置DBMS_STATS的值的,可以用GET_PARAM函数来得到参数的当前值。
参数:
--pname:
可以是CASCADE,DEGREE,EASTIMAT_PERCENT,METHOD_OPT,NO_INVALIDATE,GRANULARITY,AUTOSTATS_TARGET
--pval:
参数的值。如果是NULL,则设成默认值。
To run this procedure, you must have the SYSDBA or both the ANALYZE ANY DICTIONARY and ANALYZE ANY system privileges
举例:
DBMS_STATS.SET_PARAM('CASCADE','DBMS_STATS.AUTO_CASCADE');
DBMS_STATS.SET_PARAM('ESTIMATE_PERCENT','5');
DBMS_STATS.SET_PARAM('DEGREE','NULL');
4. SET_SYSTEM_STATS
设置系统的统计
参数:
--pname:
--iotfrspeed:
IO的传输速度/毫秒
--
ioseektim:
seek time + latency time + operating system overhead time, in milliseconds
--sreadtim:
average time to read single block (random read), in milliseconds
--mreadtim
:
average time to read an mbrc block at once (sequential read), in milliseconds
--cpuspeed
:
average number of CPU cycles for each second, in millions, captured for the workload (statistics collected using 'INTERVAL' or 'START' and 'STOP' options)
--cpuspeednw:
average number of CPU cycles for each second, in millions, captured for the noworkload (statistics collected using 'NOWORKLOAD' option.
--mbrc:
average multiblock read count for sequential read, in blocks
--maxthr:
I/O的最大吞吐量,bytes/second
--slavethr:
average slave I/O throughput, in bytes/second
--pvalue:
参数的值
--stattab:
指定存放用户分析的数据的表名
--statid:
用户ID
--statown
:
stattab指定表的所属用户
--cachedblk:
段在buffer cache中的平均块数
--cachehit
:
段的平均命中率
5. SET_TABLE_STATS
设置表的统计
参数:
--ownname,--tabname,--partname,--stattab,--statid
同上
--numrows:
表中有多少行
--numblks:
表占用了多少块
--avgrlen
:平均的行长度
--flags
,
--statown
,
--no_invalidate
,
--cachedblk,--cachehit,--force
同上
6. PREPARE_COLUMN_VALUES
7. PREPARE_COLUMN_VALUES_NVARCHAR2
8. PREPARE_COLUMN_VALUES_ROWID
9. GET_COLUMN_STATS Procedures
取栏位的统计信息
参数:
--ownname,--tabname,--colname, --partname,--stattab,--statid, --ext_stats, --stattypown, --STATTYPNAME, --distinct, --density, --nullcnt,--srec,--avgclen,--statown
10. GET_INDEX_STATS
取索引的统计信息
参数
--ownname,--indname,--partname,--stattab,--statid,--ext_stats,--stattypown,--STATTYPNAME, --numrows, --numblks
--numdist:
Number of distinct keys in the index (partition)
--avglblk:
Average integral number of leaf blocks in which each distinct key appears for this index (partition)
--avgdblk:
Average integral number of data blocks in the table pointed to by a distinct key for this index (partition)
--clstfct:
Clustering factor for the index (partition)
--indlevel:
Height of the index (partition)
--statown:
stattab的用户名
--guessq
:
估计INDEX的质量
--cachedblk:
段在buffer cache中的平均块数
--cachehit
:
段的平均命中率
11
.
GET_SYSTEM_STATS
此过程取系统的统计信息
语法:
DBMS_STATS.GET_SYSTEM_STATS (
status OUT VARCHAR2,
dstart OUT DATE,
dstop OUT DATE,
pname VARCHAR2,
pvalue OUT NUMBER,
stattab IN VARCHAR2 DEFAULT NULL,
statid IN VARCHAR2 DEFAULT NULL,
statown IN VARCHAR2 DEFAULT NULL);
参数:
--Status:会输出以下值之一 COMPLETED,AUTOGATHERING,MANUALGATHERING,BADSTATS
--dstart:
收集分析开始的时间
--dstop:
收集分析结束的时间
--pname:
需要获取值的参数,可选的值有:iotfrspeed,ioseektim,sreadtim,mreadtim,cpuspeed,cpuspeednw,mbrc,maxthr,slavethr
--pvalue:
值
--stattab:
统计表所表名,如果此值为null,则会从数据字典中取。
--statid:
stattab的id
--statow
n:
stattab的own
12.GET_TABLE_STATUS
取table相关的统计信息
语法:
DBMS_STATS.GET_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
numrows OUT NUMBER,
numblks OUT NUMBER,
avgrlen OUT NUMBER,
statown VARCHAR2 DEFAULT NULL,
cachedblk OUT NUMBER,
cachehit OUT NUMBER);
13
.
CREATE_STAT_TABLE
此过程建立stattab的TABLE,以保存统计信息。
语法:
DBMS_STATS.CREATE_STAT_TABLE (
ownname VARCHAR2,
stattab VARCHAR2,
tblspace VARCHAR2 DEFAULT NULL);
参数:
--ownname:
用户名
--stattab:
需建立的stattab表名。
--tblspace:
stattab的tablespace.如果为null则会使用用户的默认表空间
14
.
DROP_STAT_TABLE
此过程删除用户定义的统计表
语法:
DBMS_STATS.DROP_STAT_TABLE (
ownname VARCHAR2,
stattab VARCHAR2);
第三部分
Deleting Statistics
1
.
DELETE_COLUMN_STATS
语法:
DBMS_STATS.DELETE_COLUMN_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
colname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
cascade_parts BOOLEAN DEFAULT TRUE,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (
get_param('NO_INVALIDATE')),
force BOOLEAN DEFAULT FALSE);
参数:
--ownname
:
table所属用户名
--tabname:
表名
--colname
:
column
--partname
:
分区名
--stattab
:
统计表名,如果为null,则从数据字典中取
--statid
:
stattab的id(当stattab为null时才需指定)
--cascade_parts:
如果指定的表是分区表且partname是null,此值为TRUE时会删除所有指定字段分区的统计信息。
--statown:
stattab的owner
--no_invalidate
:
如设为TRUE,相关的游标不失效。
--force
:
When value of this argument is TRUE, deletes column statistics even if locked
2. DELETE_DATABASE_STATS
此过程删除数据库中所有TABLE的统计信息
语法:
DBMS_STATS.DELETE_DATABASE_STATS (
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (
get_param('NO_INVALIDATE')),
force BOOLEAN DEFAULT FALSE);
3
.
DELETE_DICTIONARY_STATS
此过程删除'SYS', 'SYSTEM' and RDBMS component schemas的统计信息