对于Oracle版本9及更高版本,应在何时以及如何执行表统计信息收集?你将如何为一个大型数据库收集统计数据,在那里统计数据收集将与“营业时间”发生冲突。
发布于 2008-08-31 15:48:20
只要数据内容发生了较大的更改,例如大量的删除或插入,就应该收集统计信息。如果表结构发生了变化,您还应该收集统计数据。建议使用“ESTIMATE”选项。
如果可能,在非工作时间自动执行此操作,或者如果您必须在工作时间执行此操作,请选择对您希望收集其统计信息的表的访问次数最少的时间。
发布于 2008-09-22 19:44:37
我不同意你总是应该在有很多删除或插入之后重新构建你的统计数据。一如既往,这取决于。在数据仓库的情况下,在重新构建物化视图时,您将执行大量的删除和插入操作,但数据的基本结构不会改变。
仅当表的内容发生重大更改时,才需要重新计算表的统计数据。这并不一定意味着在大量删除或插入之后,而是在删除、插入或更新与可能的执行计划相关的内容发生实质性更改时。
如果您正在截断表并重新构建(这将重置您的统计信息),而不是昂贵的统计信息计算,那么在重新构建表之后,在截断和恢复统计信息之前存储统计信息通常会更好。
要保存当前使用的统计信息视图,请执行以下操作:
dbms_stats.export_table_stats要在之后恢复它们,您可以使用:
dbms_stats.import_table_stats(对于schema和database,有相应的步骤。)
发布于 2008-09-21 01:48:42
在使用估计值(sample_percent)时,请确保您至少收集了10 %。下面的代码可能会产生非常可疑的结果。
https://stackoverflow.com/questions/36813
复制相似问题