优化器统计范围:表统计;--行数,块数,行平均长度;all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN;列统计;--列中唯一值的数量(NDV),NULL值的数量,数据分布; --DBA_TAB_COLUMNS:NUM_DISTINCT,NUM_NULLS,HISTOGRAM;索引统计;--叶块数量,等级,聚簇因子; --DBA_INDEXES:LEAF_BLOCKS,CLUSTERING_FACTOR,BLEVEL;系统统计;--I/O性能与使用率; --CPU性能与使用率; --存储在aux_stats$中,需要使用dbms_stats收集,I/O统计在X$KCFIO中;-------------analyze-------------需要使用ANALYZE统计的统计:使用LISTCHAINEDROWS和VALIDATE子句;收集空闲列表块的统计;putestatistics;Analyzeindex|clusterindexnameestimatestatistics;PUTESTATISTICSFORTABLEFORALL[LOCAL]INDEXESFORALL[INDEXED]COLUMNS;ANALYZETABLEtablenameDELETESTATISTICSANALYZETABLEtablenameVALIDATEREFUPDATEANALYZETABLEtablenameVALIDATESTRUCTURE[CASCADE]|[INTOTableName]ANALYZETABLEtablenameLISTCHAINEDROWS[INTOTableName]ANALYZE不适合做分区表的分析----------------------dbms_stats----------------------dbms_stats能良好地估计统计数据(尤其是针对较大的分区表),并能获得更好的统计结果,最终制定出速度更快的SQL执行计划。这个包的下面四个存储过程分别收集index、table、schema、database的统计信息: 收集表、列和索引的统计信息; 收集SCHEMA下所有对象的统计信息; 收集索引的统计信息; :所有字典对象的统计; ==========================必须授予普通用户权限******@ORADB>grantexecute_catalog_roletohr;******@ORADB>grantconnect,resource,analyzeanytohr;统计收集的时间考虑==========================当参数STATISTICS_LEVEL设置为TYPICAL或者ALL,系统会在夜间自动收集统计信息。查看系统自动收集统计信息的job:SELECT*FROMdba_scheduler_jobsWHEREjob_name='GATHER_STATS_JOB';也可以disable自动收集统计信息:('GATHER_STATS_JOB');END;使用手工统计对所有更改活动中等的对象自动统计应该足够充分,由于自动统计收集在夜间进行,因此对于一些更新频繁的对象其统计可能已经过期。两种典型的对象:高度变化的表在白天的活动期间被TRUNCATE/DROP并重建;块加载超过本身总大小10%的对象;对于第一种对象可以使用以下两种方法:1将这些表上的统计设置为NULL,当Oracle遇到没有统计的表时,将动态收集必要的统计作为查询优化的一部分;动态收集特征由OPTIMIZER_DYNAMI
认证之管理统计信息 来自淘豆网www.taodocs.com转载请标明出处.