暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

OceanBase管理数据库自动收集统计信息

2023-07-13
412

目前 OceanBase 数据库优化器通过基于 DBMS_SCHEDULER 系统包实现的 MAINTENANCE WINDOW 来实现每日的自动统计信息收集,从而保证统计信息的不断迭代更新。

MAINTENANCE WINDOW

OceanBase 数据库定义 MAINTENANCE WINDOW 为周一到周日有 7 个自动统计信息收集任务,周一到周五的任务开始时间为 22:00,最大收集时长为 4 小时,周六和周日的开始时间为 6:00,最大收集时长为 20 小时,如下表所示。

维护窗口名字开始时间/频率最大收集时长
MONDAY_WINDOW22:00/per week4 hours
TUESDAY_WINDOW22:00/per week4 hours
WEDNESDAY_WINDOW22:00/per week4 hours
THURSDAY_WINDOW22:00/per week4 hours
FRIDAY_WINDOW22:00/per week4 hours
SATURDAY_WINDOW6:00/per week20 hours
SUNDAY_WINDOW6:00/per week20 hours

查询 MAINTENANCE WINDOW 信息

目前 OceanBase 数据库中 MAINTENANCE WINDOW 是基于 DBMS_SCHEDULER 系统包实现的,因此也可以通过查询 DBMS_SCHEDULER 系统包相关视图来查询 MAINTENANCE WINDOW 的相关信息。

模式View NameDescription
Oracle 模式DBA_SCHEDULER_JOBS查询 Job 信息
Oracle 模式SYS.ALL_VIRTUAL_TENANT_SCHEDULER_JOB_REAL_AGENT查询 Job 信息的代理表
MySQL 模式OCEANBASE.DBA_SCHEDULER_JOBS查询 Job 信息

设置 MAINTENANCE WINDOW 属性

目前 OceanBase 数据库中 MAINTENANCE WINDOW 的属性设置也是通过 DBMS_SCHEDULER 系统包实现的,当前支持的属性设置语法如下:

  • 禁止/启用自动统计信息任务收集:

    DBMS_SCHEDULER.DISABLE($window_name);
    
    DBMS_SCHEDULER.ENABLE($window_name);
    
    • 示例 1:禁用周一自动收集统计信息

      CALL  DBMS_SCHEDULER.DISABLE('MONDAY_WINDOW');
      
    • 示例 2:启用周一自动收集统计信息

      CALL DBMS_SCHEDULER.ENABLE('MONDAY_WINDOW');
      
  • 设置统计信息任务下次开始的时间:

    DBMS_SCHEDULER.SET_ATTRIBUTE($window_name, 'NEXT_DATE', $next_time);
    

    示例:设置周一自动收集统计信息开始的时间在晚上 8 点。

    CALL DBMS_SCHEDULER.SET_ATTRIBUTE('MONDAY_WINDOW', 'NEXT_DATE', '2022-09-12 20:00:00');
    
  • 设置统计信息任务收集的时长:

    DBMS_SCHEDULER.SET_ATTRIBUTE($window_name, 'DURATION', $duration_time);
    

    示例:设置周一自动收集统计信息的持续时长为 6 小时。

    CALL DBMS_SCHEDULER.SET_ATTRIBUTE('MONDAY_WINDOW', 'DURATION', '21600s');
    

DML STATS

DML STATS 用于记录一张表做增、删、改的次数。

表的 DML STATS 对于自动统计信息收集有着至关重要的作用,它决定了一张表是否需要再次收集统计信息。数据库中的表的数据信息并不是每天都会更新,因此对于不存在数据变化或者数据变化在预期范围内的表,不需要再次收集统计信息,这样可以提升自动统计信息收集任务的执行效率。

下表列举了 Oracle 和 MySQL 两种模式下支持查询 DML STATS 信息的相关视图和表信息。

模式视图名称描述
Oracle 模式GV$DML_STATS、V$DML_STATS查询虚表中记录的表的 DML STATS
Oracle 模式SYS.ALL_VIRTUAL_MONITOR_MODIFIED_REAL_AGENT查询代理表中记录表的 DML STATS
Oracle 模式ALL_TAB_MODIFICATIONS、DBA_TAB_MODIFICATIONS、USER_TAB_MODIFICATIONS查询表中所有的 DML STATS
MySQL 模式OCEANBASE.GV$DML_STATS、OCEANBASE.V$DML_STATS查询虚表中记录的表的DML STATS
MySQL 模式OCEANBASE.DBA_TAB_MODIFICATIONS查询表中所有的 DML STATS

自动统计信息收集策略

OceanBase 数据库中表的统计信息过期判断标准为,如果当前表增量的 DML 次数(上一次收集统计信息时 DML 次数到本次收集统计信息期间发生的增/删/改总次数)超过设置的阈值时就会过期。阈值的默认值是 10%,阈值可以通过 peres 调整设置,详细信息请参见 收集策略配置项(Prefs)管理功能

目前 OceanBase 数据库优化器的自动统计信息收集策略如下:

  • 系统表和非分区用户表的自动收集策略:

    • 如果表没有 GLOBAL 级别的统计信息,自动收集统计信息。

    • 如果表有 GLOBAL 级别的统计信息,但是统计信息已经过期,则自动收集统计信息。

    否则,OceanBase 数据库优化器不会自动收集统计信息。

  • OceanBase 数据库分区用户表的自动收集策略:

    • 如果表没有任何统计信息,自动收集所有的统计信息。

    • 如果表有分区级别的统计信息,但是没有 GLOBAL 级别统计信息,则采用增量的方式自动收集统计信息。

    • 如果表有 GLOBAL 级别统计信息,但是已经过期,则自动收集所有的统计信息。

    • 如果表有 GLOBAL 级别统计信息,但是没有全部过期,只是部分分区的统计信息过期,则自动收集统计信息过期的分区统计信息,同时采用增量的方式推导 GLOBAL 级别统计信息。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论