转载来源:Oracle统计信息的收集和维护_oracle收集统计信息_Floating warm sun的博客-CSDN博客
手动收集统计信息
部分参数说明:
(1)estimate_percent:表示选择的采样比例,如果太低,收集速度会快,但可能不会很准确,如果太高,收集速度会慢,但比较准确,各有利弊,默认是100%。
(2)degree:并行统计信息收集,应根据对象的大小和并行性初始化参数的设置选择恰当的并行度,默认为null。
(3)cascade:表示是否收集对应的索引、列等的统计信息。
(4)granularity:有四个可选项:
all:采集global、partition、subpartition等粒度统计信息。
auto:根据分区类型,由Oracle确定统计信息采集粒度。
partition:只采集partition粒度统计信息。
subpartition:只采集subpartition粒度统计信息。
全库收集
begin
dbms_stats.gather_database_stats(ESTIMATE_PERCENT=>DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'for all indexed columns size auto', cascade=>true, degree=>8);
end;
/
schmea收集
exec dbms_stats.gather_schema_stats(ownname=>'scott',estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE,degree=>8,cascade=>true,granularity=>'ALL');
表收集
exec dbms_stats.gather_table_stats(ownname=>'scott',tabname=>'DEPT30_TEMP',estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE,degree=>8,cascade=>true,granularity=>'ALL');
分区收集
begin
dbms_stats.gather_table_stats(ownname => ‘SCOTT’,
tabname => ‘表名’,
partname = ‘分区名’,
estimate_percent = DBMS_STATS.AUTO_SAMPLE_SIZE,
degree => 8,
cascade => true,
granularity => ‘PARTITION’,
method_opt > ‘FOR ALL INDEXED COLUMNS’);
end;
/
数据字典收集
exec dbms_stats.gather_dictionary_stats (estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE,degree=>8,cascade=>true,granularity=>'ALL');
动态性能表统计信息
exec dbms_stats.gather_fixed_objects_stats;
硬件统计信息收集
–典型业务开始前
exec dbms_stats.gather_system_stats(‘START’);
–典型业务结束后
exec dbms_stats.gather_system_stats(‘STOP’);
锁定统计信息
对于有些表或者用户的数据基本不怎么发生变化,如果每次收集时也将其收集一边浪费资源,因此可以将这些表或者用户进行统计信息采集的锁定。
–锁定表
exec dbms_stats.lock_table_stats(‘owner name’,‘table name’);
–锁定整个schema
exec dbms_stats.lock_schema_stats (‘schema name’);
解除锁定:
–表
exec dbms_stats.unlock_table_stats(‘owner name’,‘table name’);
–schema
exec dbms_stats.unlock_schema_stats (‘schema name’);
删除统计信息
exec DBMS_STATS.DELETE_TABLE_STATS('scott','DEPT30_TEMP');