Oracle 统计信息 到底是不是实时收集的?

小雨不打伞 2013-09-04
[list]
  • 新建一张ord表, 没有任何数据,通过[select * from ord] 查看统计信息, cost 为2
  • 向ord 表插入1000条数据,执行
  • EXEC dbms_stats.gather_table_stats('COREBM','ORD',degree => 4,estimate_percent => null,method_opt => 'for all columns',cascade => TRUE);

    ] 重新收集统计信息,通过[select * from ord] 查看统计信息,cost: 9
  • 把ord 表中所以数据清空([delete from ord]), 执行[EXEC dbms_stats.gather_table_stats(...)] 重新再收集统计信息,通过[select * from ord] 查看统计信息,cost仍然为9
  • [/list]

    最后一步中, 在删除了所有数据之后,重新收集一遍统计信息,为什么ord表的统计信息没有根据数据库里的数据变回最初的2?

    魔力猫咪 2013-09-05
    统计信息是由一个任务定时执行的。如果在业务高峰期收集统计信息会引发系统性能问题的。
    所以这个缺省时间一般都是深夜,而且采样率也是可以调整的,对超大规模的数据库进行100%采样是不可能的,Oracle提供了从1-100的不同档位进行调节。
    dddpeter 2013-10-28
    不是实时手机,一般晚上进行收集,比较耗费资源
    wushuigen 2013-10-29
    这个是因为你建表为普通堆表,删除数据但并不会删除已开辟的空间。所以看到的const仍然为9
    Global site tag (gtag.js) - Google Analytics