概述
Oracle 强烈推荐在没有统计信息或统计信息陈旧的对象上使用自动优化统计信息收集特性进行统计信息收集。
自动优化统计信息收集解放了数据库管理员们,他们不再需要完成以下艰巨的任务来决定:
- 哪个对象需要统计信息
- 针对对象正确的采样比率
- 基于工作负载轮廓的柱状图桶的大小
- 统计信息收集的并行度
请注意使用自动优化统计信息收集特性时,Oracle 也收集数据字典对象们的统计信息。
统计信息自动收集 在Oracle 10g 版本已经被引入,然而在多数情况下当前数据库升级到这个版本及以上版本后,DBA 们依然用他们自己的作业或定制的脚本收集对象的统计信息。在这种情况下,Oracle 强烈推荐客户在部署自动优化统计信息收集特性到生产环境前首先在测试环境验证它的工作情况。如果通过使用自动统计信息收集能满足需求,DBA 们可以关闭收集统计信息的旧的作业或定制的脚本,以避免任何冲突或浪费资源。
动态采样
当一个语句提交到优化器时,如果任何表都没有统计信息的话,(例如:他们是最近创建的并且日常维护窗口还没有生效),可以使用优化器的动态采样特性来收集统计信息。
这个特性取样表的有限子集合,不会引起显著的开销。在高度性能敏感的应用中,甚至一个很小的开销都是不能忍受的,DBA 们应该在表被创建后尽快在表上面设置近似的统计信息,或者关闭这个特性以避免动态采样。
统计信息保留
起始于 Oracle 10G,当对表进行统计信息收集时,旧的统计信息被保留。这意味着:如果在收集统计信息后发生了查询的性能问题,那么旧的统计信息可以被恢复。
定期维护时间窗
11g
在 11g 提供了日常维护窗口,他们的默认定义如下:
每个工作日夜晚:始于晚上10点,终于凌晨2点
每个周末:始于周六上午6点,并持续20小时
10g
在 Oracle 数据库 10g 中,默认的维护窗口配置覆盖了下面的时间段:
每个工作日的下午10点到第二天凌晨6点
所有的周末时间(周五晚上10点到周一凌晨6点)
这种方式的维护窗口配置为大量的日常任务(如实施重组索引,实施收集优化器统计信息)保留了充分分时间。
对于全球 24 x7 业务,这种默认的维护窗口时间可能不适当,或许与其他的活动操作(数据加载等)同时发生。这种情况下,DBA 们应该修改默认的维护窗口去适应活动业务低波峰时段。
统计信息级别的建议
默认设置 TYPICAL 确保数据库自我管理功能所需求的所有主要统计信息的收集,及提供最好的综合性能。这个默认值应该能胜任大多数的环境,并且 Oracle 不推荐去修改它的值,除非 Oracle 技术支持有其他的推荐(例如:通过设定参数 STATISTICS_LEVEL 成 BASIC 来无效化 Oracle 数据库特性和功能所需要的很多重要统计信息的收集,因此不推荐)。
此外,为了使用自动统计信息收集特性,参数 STATISTICS_LEVEL 的值应该设置成 TYPICAL 或 ALL。 如果通过设定 STATISTICS_LEVEL 为 BASIC 无效化自动检测功能,那么统计信息收集将不能侦测到陈旧的统计信息。
当设置参数 STATISTICS_LEVEL 为 ALL,额外的统计信息被添加到参数为 TYPICAL 时收集的统计信息的集合。额外的统计信息是时效 OS 统计信息和计划执行统计数据。
自动优化统计信息收集 – 不稳定的表
当使用以定期增长/清除(如:可能有不稳定数据字典表的 AQ/Streams 对象)为特征的不稳定对象时,Oracle 推荐收集这些对象在稳定时期的统计信息(例如:当这些表已经达到他们的最大值),然后使用存储过程<dbms_stats.lock_table_stats>锁定当前的统计信息。通过锁定统计信息,你可以尝试保持一个标准的性能状态,而无视数据的变化。
在特定的值上锁定统计信息是对因数据的不稳定性质而频繁的收集统计信息的折中方案。至于字段统计信息,如果他们被锁定,但是在查询中提供的值和它们记录的统计信息不同的话,你有可能发现生成了差的执行计划。这种情况下,你可以不搜集字段统计信息以提供更加一致的结果。
如果你发现锁定统计信息的方法没有帮助,那么试着使用其他值或其它可以获取期望执行计划的方法(如:稳定计划或动态统计信息)的。




