【疑问】OB是否需要每天通过dbms_stats来收集统计信息

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】OB 3.2
【问题描述】在学习OB的过程中,发现OB收集统计信息有2种方式:

  • 每日合并或者手动合并,会进行存储层的统计信息的收集,主要收集表\分区的行数。统计信息存储在sys租户的__all_virtual_meta_table表中;
  • oracle运行dbms_stats包或者analyze进行收集,存放在oracle租户的系统表all_tab_statisticsall_tab_column_statisticsall_tab_histograms中;mysql租户支持analyze方式收集统计信息。

我的问题:数据库每日合并会自动进行,但是后面的dbms_stats默认应该是不打开的吧?这样收集到的统计信息是不是太少了,有必要把dbms_stats收集统计信息方式打开吗?我看到Oracle默认收集统计信息都是会去收集列的min_value、max_value、num_distinct这些信息的。

1 个赞

你好,你提的这个技术问题牵涉到OceanBase企业版范围内的功能细节;针对此类问题,建议你通过以下方式寻求帮助:

  1. 如你所在的企业客户已签署OceanBase企业版销售合同,请你联系客户经理;
  2. 如你所在的企业客户尚未签署OceanBase企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。

另外,我们欢迎你使用社区版,并在论坛/社群中分享你对社区版本的想法、经验和问题,与其他社区成员共同交流。

看官网文档介绍: OceanBase分布式数据库-海量数据 笔笔算数
ORACLE 租户默认不打开,需要设置一个 JOB。

##设置一个从现在开始,每隔一天执行自动收集统计信息的任务
DECLARE
   jid BINARY_INTEGER;
BEGIN
   DBMS_JOB.SUBMIT(jid, 'dbms_stats.gather_database_stats_job_proc();', trunc(sysdate) , 'trunc(sysdate) + 1');
   COMMIT;
END;

统计信息有利有弊,根据实际问题选择。可以参考: OBCE V3 培训实验:SQL优化之表统计信息 (qq.com)

实践经验:不需要,不过需要重点关注计划变化的 SQL(OCP里有相关功能)。