二十、dbms_stats(用于搜集,查看,修改数据库对象的优化统计信息)
1、概述
作用:用于搜集,查看,修改数据库对象的优化统计信息.
2、包的组成
1)、get_column_stats
作用:用于取得列的统计信息
语法:dbms_stats.get_column_stats(ownname
varchar2,tabname varchar2,colname varchar2,partname varchar2 default
null,stattab varchar2 default null,
statid varchar2 default
null,distcnt out number,density out number,nullcnt out number,srec out
statrec,avgclen out number,statown varchar2 default null);
其中ownname指定方案名,tabname指定表名,colname指定列名,partname指定分区名,stattab指定用户统计表名,statid指定与统计相关的标识符,distcnt返回不同值的个数,
density返回列的密度,nullcnt返回列的null个数,srec返回列的最大、最小和直方图值,avgclen返回列的平均长度,statown指定包含stattab的方案名。
2)、get_index_stats
作用:用于取得索引的统计信息
语法:dbms_stats.get_index_stats(ownnane varchar2,indname varchar2,
partname varchar2 default null,stattab varchar2 default null,
statid varchar2 default null,numrows out number,
numlblks out number,numdist out number,
avglblk out number,avgdblk out number,clstfct out number,
indlevel out number,statown varchar2 default null);
其中ownnane指定索引所有者名,indname指定索引名,partname指定索引分区名,
stattab指定统计表名,statid指定统计表相关的标识符,numrows返回索引行数,
numlblks返回索引块个数,numdist返回索引不同键值个数,
avglblk返回每个键值占用的平均叶块个数,avgdblk返回每个键值对应表行所占用的平均数据块个数,
clstfct返回索引的聚簇因子,indlevel返回索引层数,statown指定统计表所有者。
3)、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),dstat返回起始搜集日期,dstop返回结束搜集日期,
pname指定要取得的参数名(sreadtim,mreadtim,cpuspeed,mbrc,maxthr,slavethr),pvalue返回参数值。
4)、get_table_stats
作用:用于取得表的统计信息
语法:dbms_stats.get_table_stats(owname 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);
其中avgrlen返回表行的平均长度。
5)、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 false);
其中cascade_parts指定是否要级联删除分区统计,no_invalidate指定是否要使相关游标无效。
例子:dbms_stats.delete_column_stats('scott','emp','ename');
6)、delete_index_stat
作用:用于删除索引统计信息
语法:dbms_stats.delete_index_stats(ownname varchar2,indname 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 false);
例子:exec dbms_stats.delete_index_stats('scott','pk_emp');
7)、delete_system_stats
作用:用于删除系统统计信息
语法:dbms_state.delete_system_stats(stattab varchar2 default null,
statid varchar2 default null,statown varchar2 default null);
8)、delete_table_stats
作用:用于删除表的统计信息
语法:dbms_stats.delete_table_stats(ownname varchar2,tabname varchar2,
partname varchar2 default null,stattab varchar2 default null,
statid varchar2 default null,cascade_parts boolean default true,
cascade_columns boolean default true,cascade_indexes boolean default true,
statown varchar2 default null,no_invalidate boolean default false);
其中cascade_columns指定是否级联删除列统计,cascade_indexes指定是否级联删除索引统计。
例子:exec dbms_stats.delete_table_stats('scott','emp');
9)、delete_schema_stats
作用:用于删除特定方案的统计信息
语法:dbms_stats.delete_schema_stats(ownname varchar2,stattab varchar2 default null,
statid varchar2 default null,statown varchar2 default null,no_invalidate boolean default false);
例子:exec dbms_stats.delete_schema_stats('scott');
10)、delete_database_stats
作用:用于删除整个数据库的统计信息
语法:dbms_stats.delete_database_stats(stattab varchar2 default null,statid varchar2 default null,
statown varchar2 default null,no_invalidate boolean default false);
例子:exec dbms_stats.delete_database_stats
11)、create_stat_table
作用:用于在特定方案建立统计表
语法:dbms_stats.create_stat_table(ownname varchar2,stattab varchar2,tblspace varchar2 default null);
其中tblspace指定统计表所在表空间。
例子:exec dbms_stats.create_stat_table('scott','stattab');
12)、drop_stat_table
作用:用于删除特定方案的统计表
语法:dbms_stats.drop_stat_table(ownnanme varchar2,stattab varchar2);
例子:exec dbms_stats.drop_stat_table('scott','stattab');
13)、export_column_stats
作用:用于导出列统计并存储到统计表中。
语法:dbms_stats.export_column_stats(ownname varchar2,tabname varchar2,colname varchar2,
partname varchar2 default null,stattab varchar2,
statid varchar2 default null,statown varchar2 default null);
例子:exec dbms_stats.export_column_stats('scott','emp','ename',stattab=>'stattab');
14)、export_index_stats
作用:导出索引统计信息,并存储到统计表中
语法:dbms_stats.export_index_stats(owname varchar2,indname varchar2,
partname varchar2 default null,stattab varchar2,
statid varchar2 default null,statown varchar2 default null,
statown varchar2 default null);
例子:exec dbms_stats.export_index_stats('scott','pk_emp',stattab=>'stattab');
15)、export_system_stats
作用:用于导出系统统计信息,并存储到统计表中。
语法:dbms_stats.export_system_stats(stattab varchar2,statid varchar2 default null,statown varchar2 default null);
16)、export_table_stats
作用:用于导出表的统计信息,并将其存储到统计表中
语法:dbms_stats.export_table_stats(ownname varchar2,tabname varchar2,partname varchar2 default null,stattab varchar2,
statid varchar2 default null,cascade boolean default true,statown varchar2 default null);
例子:exec dbms_stats.export_table_stats('scott','emp',stattab=>'stattab');
17)、export_schema_stats
作用:用于导出方案的统计信息,并将其存储到统计表中。
语法:dbms_stats.export_schema_stats(ownname varchar2,stattab varchar2,
statid varchar2 default null,statown varchar2 default null);
例子:exec dbms_stats.export_shcema_stats('scott',stattab=>'stattab');
18)、export_database_stats
作用:用于导出数据库的所有统计信息,并存储到统计表中。
语法:dbms_stats.export_database_stats(stattab varchar2,statid varchar2 default null,statown varchar2 default null);
例子:exec dbms_stats.export_database_stats(stattab=>'stattab',statown=>'scott');
19)、import_column_stats
作用:用于从统计表取得列统计,并将其存储到数据字典中。
语法:dbms_stats.import_column_stats(ownname varchar2,tabname varchar2,colname varchar2,
partname
varchar2 default null,stattab varchar2,statid varchar2 default
null,statown varchar2 default null,no_invalidate boolean default false);
例子:exec dbms_stats.import_column_stats('scott','emp','ename',stattab=>'stattab',statown=>'scott');
20)、import_index_stats
作用:用于从统计表中取得索引统计,并将其存储到数据字典中。
语法:dbms_stats.import_index_stats(ownname varchar2,indname varchar2,
partname varchar2 default null,stattab varchar2,statid varchar2 default null,
statown varchar2 default null,no_invalidate boolean default false);
例子:exec dbms_stats.import_index_stats('scott','pk_emp',stattab=>'stattab',statown=>'scott');
21)、import_system_stats
作用:用于从统计表中取得系统统计,并将其存储到数据字典中。
语法:dbms_stats.import_system_stats(stattab varchar2,statid varchar2 default null,statown varchar2 default null);
22)、import_table_stats
作用:用于从统计表中取得表统计,并将去存储到数据字段中。
语法:dbms_stats.import_table_stats(ownname varchar2,tabname varchar2,partname varchar2 default null,
stattab varchar2,statid varchar2 default null,cascade boolean default true,
statown varchar2 default null,no_invalidate boolean default false);
例子:exec dbms_stats.import_table_stats('scott','emp',stattab=>'stattab',statown=>'scott');
23)、import_schema_stats
作用:用于从统计表中取得方案统计,并将去存储到数据字典中。
语法:dbms_stats.import_schema_stats(owname varchar2,stattab varchar2,
statid varchar2 default null,statown varchar2 default null,no_invalidate boolean default flase);
例子:exec dbms_stats.import_schema_stats('scott',stattab=>'stattab',statown=>'scott');
24)、import_database_stats
作用:用于从统计表中取得数据库所有对象的统计,并将其存储到数据字典中。
语法:dbms_stats.import_database_stats(stattab varchar2,statid varchar2 default null,
statown varchar2 default null,no_invalidate boolean default false);
例子:exec dbms_stats.import_database_stats(stattab=>'stattab',statown=>'scott');
25)、gather_index_stats
作用:用于搜集索引统计
语法:dbms_stats.gather_index_stats(ownname varchar2,indname varchar2,
partname varchar2 default null,estimate_percent number default null,
stattab varchar2 default null,statid varchar2 default null,
statown varchar2 default null,degree number default null,
granularity varchar2 default 'default',no_invalidate boolean default false);
其中ownname指定方案名,indname指定索引名,partname指定分区名,estimate_percent指定要预估的行百分比,
stattab指定用户统计表名,statid指定与统计相关的标识符,statown指定包含STATTAB的方案名,degree指定并行度,
granularity指定要搜集索引的粒度(default,subpartition,partition,global,all),no_invalidate指定是否要使用相关游标无效。
例子:exec dbms_stats.gather_index_stats('scott','pk_emp');
26)、gather_table_stats
作用:用于搜集表统计
语法:dbms_stats.gather_table_stats(ownname varchar2,tabname varchar2,
partname varchar2 default null,estimate_percent number default null,
block_sample boolean default false,method_opt varchar2 default 'FOR ALL COLUMNS SIZE 1',
degree number default null,granularity varchar2 default 'default',cascade boolean default false,
stattab varchar2 default null,statid varchar2 default null,statown varchar2 default null,
no_invalidate boolean default false);
其中block_sample指定是否使用随机采样的块个数取代行百分比,method_opt指定列统计的搜集方法,cascade指定是否要级联搜集索引统计。
例子:exec dbms_stats.gather table_stats('scott','emp');
27)、gather_schema_stats
作用:用于搜集特定方案所有对象的统计
语法:dbms_stats.gather_schema_stats(ownname varchar2,
estimate_percent number default null,block_sample boolean default false,
method_opt varchar2 default 'FOR ALL COLUMNS SIZE 1',
degree number default null,granularity varchar2 default 'default',
cascade boolean default false,stattab varchar2 default null,
statid varchar2 default null,option varchar2 default 'GATHER',
objlist out ObjectTab,statown varchar2 default null,
no_invalidate boolean default false,gather_temp boolean default false);
其中option指定统计搜集选项(GATHER,GATHER AUTO,GATHER STALE,GATHER EMPTY,LIST AUTO,LIST STALE,LIST EMPTY);
objlist返回旧对象或空对象,gather_temp指定是否要搜集临时表统计。
例子:exec dbms_stats.gather_schema_stats('scott');
28)、gather_database_stats
作用:用于搜集数据库所有对象的统计。
语法:dbms_stats.gather_database_stats(
estimate_percnet number default null,block_sample boolean default false,
method_opt varchar2 default 'FOR ALL COLUMNS SIZE 1',
degree number default null,granularity varchar2 default 'default',
cascade boolean default false,stattab varchar2 default null,
statid varchar2 default null,options varchar2 default 'gather',
objlist out ObjectTab,statown varchar2 default null,
gather_sys boolean default false,no_invalidate boolean default false,
gather_temp boolean default false);
其中estimate_percent指定要预估的行百分比,block_sample指定是否使用随机采样的块个数取代行百分比,
method_opt指定列统计的搜集方法,degree指定并行度,
granularity指定要搜集索引的粒度(default,subpartition,partition,global,all),
cascade指定是否要级联搜集索引统计,stattab指定用户统计表名,statid指定与统计相关的标识符,
option指定统计搜集选项(GATHER,GATHER AUTO,GATHER STALE,GATHER EMPTY,LIST AUTO,LIST STALE,LIST EMPTY),
objlist返回旧对象或空对象,statown指定包含STATTAB的方案名,garher_sys指定是否要搜集sys用户对象的统计,
no_invalidate指定是否要使用相关游标无效,gather_temp指定是否要搜集临时表统计。
例子:exec dbms_stats.gather_database_stats.
29)、oather_system_stats
作用:用于搜集系统统计
语法:dbms_stats.gather_system_stats(
gathering_mode varchar2 default 'NOWORKLOAD',
interval integer default null,stattab varchar2 default null,
statid varchar2 default null,statown varchar2 default null);
其中gathering_mode用于指定搜集模式值(noworkload,interval,start|stop),
interval用于指定搜集统计的时间间隔(只适用interval模式)
例子:exec dbms_stats.gather_system_stats.
30)、UNLOCK_TABLE_STATS
作用:专治ORA-38029,解锁对象统计信息。
例子:DBMS_STATS.UNLOCK_TABLE_STATS('MID_SC','DM_OLD_FEATURE_VALUE')
3、综合示例
declare dist_count number; density number; null_count number; srec dbms_stats.statrec; avg_col_len number; numrows number; numlblks number; numdist number; avglblk number; avgdblk number; clstfct number; indlevel number; avgrlen numer; begin --get_column_stats dbms_stats.get_column_stats('scott','emp','job',distcnt=>dist_count,density=>density,nullcnt=>null_count,srec=>srec,avgclen=>avg_col_len); dbms_output.put_line('不同列值个数'||dist_count); dbms_output.put_line('列平均长度'||avg_col_len); --get_index_stats dbmns_stats.get_index_stats('scott','PK_EMP',numrows=>numrows,numlblks=>numlblks, numdist=>numdist,avglblk=>avglblk,avgdblk=>avgdblk,clstfct=>clstfct,indlevel=>indlevel); dbms_output.put_line('叶块个数'||numlblks); dbms_output.put_line('索引层次'||indlevel); --get_table_stats dbms_stats.get_table_stats('scott','emp',numrows=>numrows,numlblks=>numlblks,avgrlen=>avgrlen); dbms_output.put_line('表的总计行数'||numrows); dbms_output.put_line('表所占有的块个数'||numlblks); dbms_output.put_line('表行的平均水平'||avgrlen); end;