我使用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不会分析表格?
答案 0 :(得分:8)
当您指定选项GATHER STALE
时,您告诉Oracle您只想收集自上次在该对象上收集统计信息以来经历过“重大”更改的对象的统计信息。如果Oracle确定自上次收集统计信息后表没有发生太大变化,则不会再次收集统计信息。
Oracle通过监视这些表上的DML来确定表已发生显着变化(Oracle默认监视11g中的表 - 您必须在早期版本中启用监视)。该数据定期写入DBA_TAB_MODIFICATIONS
(大约每隔几个小时)。当DBMS_STATS
使用GATHER STALE
选项运行时,Oracle会将DBA_TAB_MODIFICATIONS
中的大致更改数与表的先前统计信息进行比较,以确定是否有足够的行已更改以使其值得收集统计信息试。