合 在Oracle中,当收集表的统计信息时应该注意哪些问题
关于收集统计信息需要注意以下几点:
① 对于数据量不大的OLTP类型的系统,建议使用自动收集统计信息,并对一些特殊的大表写JOB定时收集统计信息。如果是数据量很大的OLAP或者DSS系统,那么建议DBA自己写JOB脚本来收集统计信息。
② 在导入大量数据后应及时收集统计信息后才能进行相关的后续业务处理(包括查询和修改),否则可能会由于实际数据量和统计信息里记录的数据量存在巨大差异而导致CBO选择错误的执行计划。
③ 全局临时表默认不能收集统计信息,在生成执行计划时采用动态采样比较好。
④ 对于某些新上线或新迁移的系统,建议进行全库收集一次统计信息。
⑤ 建议及时对包含日期型字段的表收集统计信息,避免出现谓词越界现象。
⑥ 统计信息收集作业采样比例:对于Oracle 11g及其以上的版本收集统计信息的采样比例建议采用DBMS_STATS.AUTO_SAMPLE SIZE。如果是Oracle 10g,那么建议将采样比例的初始值设为30%,然后根据目标SQL的实际执行情况再做调整。
⑦ 系统统计信息:如果系统的硬件环境发生了变化,那么建议要额外收集一次系统统计信息。
⑧ 内部对象统计信息:在明确诊断出系统已有的性能问题是因为X$表的内部对象统计信息不准引起的,这个时候就应该收集X$表的内部对象统计信息,其它情形就不要收集了。
⑨ 表的大小、是否并行:若表很大,而系统空闲,则可以使用并行来收集统计信息。
⑩ 表是否分区:若是分区表则建议收集全局的统计信息并且收集数据量有变更的单个分区(加GRANULARITY和参数并设置属性INCREMENTAL)的统计信息。
⑪ 是否收集索引的统计信息:一般情况下都应该收集索引的统计信息。