统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。例如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于统计信息。CBO正是根据这些统计信息数据,计算出不同访问路径下,不同join 方式下,各种计划的成本,最后选择出成本最小的计划。 统计信息是存放在数据字典表中的,如tab$,一般可通过察看某些视图来获取统计信息状况,如DBA_TABLES,DBA_INDEXES,DBA_TAB_COL_STATISTICS, DBA_TAB_HISTOGRAMS等。在这些视图中包含表示统计信息的一些字段,这些字段只有搜集过统计信息之后才有值,否则是空的。
在业务运行过程中,可能经常遇到数据库性能突变,进而导致前台进程反映变缓,很多情况下都是由于sql的执行计划改变引起的,而sql执行计划的改变和统计信息有着密切的关系。 在SQM软件中通过检查dba_indexes的last_analyzed的值来判断索引是否收集统计信息。当索引上线一定时间后仍未收集统计信息,默认是7天,则认为该索引缺少统计信息。可修改阈值调整上线时间范围。