对于 Oracle 版本 9 及更高版本,应何时以及如何执行表统计信息收集?您将如何收集大型数据库的统计信息,其中统计信息的收集会与“工作时间”发生冲突。

有帮助吗?

解决方案

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

如果可能的话,请在非工作时间以自动化流程执行此操作,或者如果您必须在工作时间执行此操作,请选择对您希望收集统计信息的表的访问权限最少的时间。

其他提示

我不同意在进行大量删除或插入后您应该始终重建统计信息。一如既往,这取决于。在数据仓库情况下,当重新构建物化视图时,您将进行大量删除和插入,但数据的基本结构不会改变。

如果已经存在,则只需重新计算表的统计信息 重要的 其内容发生变化。这确实 不是 必然意味着在大量删除或插入之后,而是当删除、插入或更新实质上改变了可能的执行计划的内容时。

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

为了保存当前的统计视图,您可以使用:

dbms_stats.export_table_stats

并在之后恢复它们,您可以使用:

dbms_stats.import_table_stats

(有相应的程序 schemadatabase.)

确保在使用估计值 (sample_percent) 时至少收集到 10%。低于这个值可能会产生非常值得怀疑的结果。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top