DBMS_STATS会分析表吗?

时间:2011-10-20 14:16:47

标签: oracle toad

我使用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不会分析表格?

1 个答案:

答案 0 :(得分:8)

当您指定选项GATHER STALE时,您告诉Oracle您只想收集自上次在该对象上收集统计信息以来经历过“重大”更改的对象的统计信息。如果Oracle确定自上次收集统计信息后表没有发生太大变化,则不会再次收集统计信息。

Oracle通过监视这些表上的DML来确定表已发生显着变化(Oracle默认监视11g中的表 - 您必须在早期版本中启用监视)。该数据定期写入DBA_TAB_MODIFICATIONS(大约每隔几个小时)。当DBMS_STATS使用GATHER STALE选项运行时,Oracle会将DBA_TAB_MODIFICATIONS中的大致更改数与表的先前统计信息进行比较,以确定是否有足够的行已更改以使其值得收集统计信息试。