Oracle的表统计信息收集

Oracle的表统计信息收集

Table Stats gathering for Oracle

Oracle版本9及更高版本何时以及如何进行表统计信息收集? 您将如何收集大型数据库的统计信息,而统计信息的收集将与"营业时间"相冲突。


我不同意在进行大量删除或插入操作之后,您应该始终重建统计信息。与以往一样,这取决于。在数据仓库中,当重建物化视图时,您将进行大量的删除和插入操作,但是数据的基本结构不会改变。

如果表的内容发生了重大变化,则只需要重新计算表的统计信息即可。这并不一定意味着要进行大量的删除或插入,而是当删除,插入或更新会相对于可能的执行计划实质性地更改内容时。

如果要截断表并进行重建(这将重置统计信息),而不是进行昂贵的统计计算,通常最好在重建表后在截断和还原统计信息之前先存储统计信息。

要保存统计信息的当前视图,请使用:

1
dbms_stats.export_table_stats

并在之后还原它们,请使用:

1
dbms_stats.import_table_stats

(schemadatabase有相应的过程。)


每当数据内容发生较大变化(例如,大量删除或插入)时,都应收集统计信息。如果表结构已更改,您还应该收集统计信息。建议使用" ESTIMATE"选项。

如果可能,在非工作时间将其作为自动化过程进行,或者,如果您必须在工作时间进行此操作,则选择对要收集其统计信息的表的访问量最少的时间。


考虑在收集时备份当前统计信息-这样,您就可以比较它们(如果您有兴趣),并且如果新统计信息引起问题,可以还原它们。请记住,统计信息用于确定执行计划-如果您希望更改执行计划,则可能只希望收集它们。


使用估计值(sample_percent)时,请确保至少收集了10%。低于该值会产生非常可疑的结果。


推荐阅读