我只有一个关于dbms_stats.gather_table_stats的简单问题。在我们的应用程序中,此语句在创建表的索引之后发生。它被称为
EXEC DBMS_STATS.GATHER_TABLE_STATS(< schemaname >, < tablename >)
。
我们使用的是Oracle 10.2g。现在的问题是什么时候会收集到什么信息呢?是否会在每次更新表格时,或满足某些标准时收集?或者只有当你再次调用gather_table_stats时它才会被收集?
答案 0 :(得分:5)
调用包时会收集统计信息(在收集完成之前包将不会返回)。
通常会有一个自动作业,它会收集现有统计信息已经变为“stale”的统计信息。已选择进行监视的表将在插入/删除/更新时记录一些额外数据(通过dba_tab_modifications可见)。
当10%的行被更改时,统计数据是“陈旧的”,并将在下一个自动作业期间重新收集。检查DBA_JOBS以查看是否/何时将数据库配置为在陈旧表上收集统计信息(提示 - 避免在繁重的使用时间内执行此操作)。
答案 1 :(得分:2)
除了Gary的好答案之外,在默认的10g数据库上运行统计数据的GATHER_STATS_JOB计划任务默认配置为在两个“维护窗口组”中运行,即WEEKEND_WINDOW和WEEKNIGHT_WINDOW。前者从周六00:00开始,持续48小时,后者每周晚10点开始,持续8小时。除非您更改计划或窗口,否则您的统计作业只能在这些时间运行。那些窗户在您的环境中可能会或可能不会很好。