DBMS_STATS会分析表吗?

Viv*_*vek 3 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;
Run Code Online (Sandbox Code Playgroud)

我的问题:在我执行此代码后,我使用TOAD工具检查了表的最后分析日期,它显示了一些其他过去的日期,而不是我运行DBMS_STATS.GATHER_SCHEMA_STATS程序时的当前日期.

这是否意味着DBMS_STATS不会分析表格?

Jus*_*ave 8

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

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