应在何时以及如何为Oracle 9版及更高版本执行表统计数据收集?您将如何为大型数据库收集统计数据,因为在大型数据库中,统计数据的收集会与“工作时间”相冲突。
为Oracle收集表统计信息
原标题:
最佳回答
只要数据内容发生了重大更改,例如大量删除或插入,就应该收集统计信息。如果表结构发生了变化,您也应该收集统计数据。建议使用“估计”选项。
如果可能的话,在工作时间以外将其作为一个自动化流程进行,或者如果您必须在工作时间内进行,则选择对您希望收集统计数据的表的访问权限最小的时间。
问题回答
我不同意你应该总是在有很多删除或插入之后重新构建你的统计数据。和以往一样,这取决于情况。在数据仓库的情况下,当重新构建物化视图时,您将进行大量的删除和插入,但数据的基本结构不会改变。
只有当表的内容发生重大变化时,才需要重新计算表的统计信息。这并不一定意味着在大量删除或插入之后,而是当删除、插入或更新对可能的执行计划的内容产生重大变化时。
如果您正在截断表并重新生成(这将重置您的统计信息),而不是昂贵的统计信息计算,您通常最好先存储统计信息,然后在重新生成表后截断并恢复它们。
要保存您使用的统计信息的当前视图,请执行以下操作:
dbms_stats.export_table_stats
之后要恢复它们,请使用:
dbms_stats.import_table_stats
(模式
和数据库
有相应的过程。)
在使用估计值(sample_percent)时,请确保您至少收集了10%。低于这个标准可能会产生非常可疑的结果。
在收集时考虑备份当前的统计数据——这样你就可以比较它们(如果你感兴趣的话),如果你的新统计数据出现问题,也可以恢复它们。请记住,统计数据是用来确定执行计划的——只有当您希望执行计划发生变化时,才可能需要收集它们。
相关问题
热门标签
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding