Oracle的表统计信息收集
Oracle版本9及更高版本何时以及如何执行表统计信息收集?我们将如何收集大型数据库的统计信息,而统计信息的收集将与"营业时间"相冲突。
解决方案
回答
每当数据内容发生较大变化(例如,大量删除或者插入)时,都应收集统计信息。如果表结构已更改,我们还应该收集统计信息。建议使用" ESTIMATE"选项。
如果可能的话,在非工作时间将其作为自动化过程进行,或者,如果我们必须在工作时间进行此操作,则选择对要收集其统计信息的表的访问量最少的时间。
回答
确保在使用估算值(sample_percent)时至少收集了10%。低于该值会产生非常可疑的结果。
回答
考虑收集时备份当前统计信息-这样,我们就可以比较它们(如果我们有兴趣),并且如果新统计信息引起问题,可以恢复它们。请记住,统计信息用于确定执行计划-如果我们希望更改执行计划,则可能只希望收集它们。
回答
我不同意在进行大量删除或者插入操作之后,我们应该始终重建统计信息。与以往一样,这取决于。在数据仓库中,当重新构建实例化视图时,将进行大量的删除和插入操作,但是数据的基本结构不会改变。
如果表的内容发生了重大变化,则只需要重新计算表的统计信息即可。这并不一定意味着要进行大量的删除或者插入,而是当删除,插入或者更新会相对于可能的执行计划实质性地更改内容时。
如果要截断表并进行重建(这将重置统计信息),而不是进行昂贵的统计计算,则通常最好在重建统计表后先存储统计信息,然后再截断和还原统计信息。
要保存统计信息的当前视图,请使用:
dbms_stats.export_table_stats
并在之后还原它们,请使用:
dbms_stats.import_table_stats
(对于"模式"和"数据库",有相应的过程。)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。