我使用DBMS_STATS.GATHER_SCHEMA_STATS过程收集代码中的统计信息。
BEGIN
DBMS_STATS.gather_schema_stats
(ownname => '<SCHEMA NAME',
estimate_percent => DBMS_STATS.auto_sample_size,
options => 'GATHER STALE',
DEGREE => NULL,
CASCADE => DBMS_STATS.auto_cascade,
granularity => 'auto'
);
end;我的问题:在我执行这段代码之后,我使用TOAD工具检查了表的最后一个分析日期,它显示的是其他一些过去的日期,而不是运行DBMS_STATS.GATHER_SCHEMA_STATS过程时的当前日期。
这是否意味着DBMS_STATS不会分析该表?
发布于 2011-10-20 14:25:17
当您指定选项GATHER STALE时,您要告诉Oracle,您只想收集自上次在该对象上收集统计信息以来经历了“重大”更改的对象的统计信息。如果Oracle确定自上次收集统计信息以来该表没有发生太大变化,它将不会再次收集统计信息。
Oracle通过监视这些表上的DML (Oracle默认在11g中监视表--您必须在早期版本中启用监视)来确定表已经发生了重大变化。该数据定期写入DBA_TAB_MODIFICATIONS (大约每隔几个小时)。当DBMS_STATS使用GATHER STALE选项运行时,Oracle将DBA_TAB_MODIFICATIONS中的大致更改数与表的先前统计信息进行比较,以确定是否有足够的行已经更改,从而值得再次收集统计信息。
https://stackoverflow.com/questions/7837301
复制相似问题