Oracle统计信息是优化器进行评估SQL的各种可能执行路径的Cost,从而指导优化器选择合适的执行计划。
一、Oracle的自动统计信息收集任务
Oracle每晚有自动任务对全库进行统计信息收集(默认周末是凌晨6点,持续20小时;工作日22点,最多持续4小时)
如果是周末为业务高峰的话,需要调整周六日的开始时间和持续时间:
关闭某一天的统计信息任务:
自动收集统计信息任务需要满足下面条件:
(1)statistics_level为TYPICAL或者ALL
(2)dba_autotask_client <auto optimizer stats collection> status值为ENABLED
可以使用如下语句关闭统计信息自动收集任务:
重新开启:
二、手动进行统计信息收集
分区级:
表级:
schema级:
数据库级:
索引级:
使用 DBMS_STATS.GET_PREFS来得到默认的参数,常用的参数有:
参考文档:DBMS_STATS
使用DBMS_STATS.SET_GLOBAL_PREFS手动修改某些参数值:
恢复参数的默认值:
三、其他
1、绑定/解绑表的统计信息
有时自动收集统计信息任务执行时某张表被truncate或者当时的统计信息不是通常值,导致执行计划错误,需要手动绑定这张表的统计信息
2、查询表的历史统计信息
查看某张表/索引统计信息收集的历史:
3、恢复表在某历史时刻的统计信息
4、查看统计信息最长的保留时间:This function returns oldest timestamp wherestatistics history is available