Oracle:分析表与Gather_Table_Stats对比Gather_Schema_Stats

时间:2018-05-14 07:22:04

标签: oracle oracle11g database-administration

目前在我的数据库中,我的前任DB正在创建一个工作,每个周末都会收集数据库中所有表的列表,并且每个表单独执行以下两个命令:

ANALYZE TABLE xxTable_Namexx ESTIMATE STATISTICS FOR ALL INDEXED COLUMNS SIZE 75 SAMPLE 100 PERCENT;

EXEC dbms_stats.gather_table_stats(xxSchemaxx,xxTable_Namexx,cascade=>TRUE);

最近有人向我建议:

1。)ANALYZE表是一种收集统计信息的旧方法,优化器不再使用它了吗?这个命令的统计数据在整个数据库中是无用的,还是在某个地方使用?

是真的吗?

2。)而不是完成所有这些,每天运行就足够了:

dbms_stats.gather_schema_stats(xxSchemaxx,cascade=>true);

如果未指定任何内容,那么size / sample%是什么?

3。)数据库中收集统计信息的一般做法/频率是什么? (数据每天都在更新,插入和删除)。我还是喜欢每周都这样做。

提前致谢。

1 个答案:

答案 0 :(得分:0)

是的,现在很难使用ANALYZE

  

要收集大多数统计信息,请使用DBMS_STATS包,   它允许您并行收集统计信息,收集全局信息   分区对象的统计信息,并微调统计信息   以其他方式收集。有关DBMS_STATS包的更多信息,请参阅Oracle Database PL/SQL Packages and Types Reference

     

使用ANALYZE语句(而不是DBMS_STATS)进行统计   与基于成本的优化器无关的集合:

     
      
  • 使用VALIDATELIST CHAINED ROWS条款

  •   
  • 收集有关空闲列表块的信息

  •   

如果未指定任何内容,那么size / sample%是什么?

参数名为estimate_percent

  

要估算的行的百分比(NULL表示计算):有效范围   是[0.000001,100]。使用常量DBMS_STATS.AUTO_SAMPLE_SIZE来   让Oracle确定适当的样本大小以获得良好的统计数据。   这是默认值。可以使用更改默认值   SET_DATABASE_PREFS程序,SET_GLOBAL_PREFS程序,   SET_SCHEMA_PREFS程序和SET_TABLE_PREFS程序。

您可以按功能DBMS_STATS.get_param('ESTIMATE_PERCENT')DBMS_STATS.GET_PREFS('ESTIMATE_PERCENT')

查询的默认值

默认情况下,Oracle会在安装时创建内部调度程序作业,该作业会在夜间自动收集统计信息。 (称为BSLN_MAINTAIN_STATS_JOB