---
title: "自动收集统计信息 | OceanBase 文档中心"
description: 自动收集统计信息 在 OceanBase 数据库 Oracle 模式下，自动统计信息是指通过设置定时任务，定期的根据表的数据变化去去自动收集统计信息。 说明 OceanBase 数据库 MySQL 模式下暂不支持此方式，只支持 ANALYZE 语句收集方式。 由于 OceanBase 数据库是一个分布式的数据库，因此…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.3 企业版 LTS

# 自动收集统计信息

更新时间：2023-07-18 17:25:59

在 OceanBase 数据库 Oracle 模式下，自动统计信息是指通过设置定时任务，定期的根据表的数据变化去去自动收集统计信息。

> **说明**
>
>  
>
> OceanBase 数据库 MySQL 模式下暂不支持此方式，只支持 `ANALYZE` 语句收集方式。

由于 OceanBase 数据库是一个分布式的数据库，因此没法直接在 Server 内部创建租户的同时自动去创建收集任务，因此需要显式地在创建好的租户或者从低版本的 Server 升级上来的租户中利用 DBMS_JOB 去创建一个定时任务，示例如下：

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

```

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

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

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

  否则，不会自动收集统计信息。
 - 分区用户表的自动收集策略：

     - 如果表没有任何统计信息，自动收集所有的统计信息。
     - 如果表有分区级别的统计信息，但是没有 `GLOBAL` 级别统计信息，则采用增量的方式自动收集统计信息。
     - 如果表有 `GLOBAL` 级别统计信息，但是已经过期，则自动收集所有的统计信息。
     - 如果表有 `GLOBAL` 级别统计信息，但是没有全部过期，仅仅只是部分分区的统计信息过期，则自动收集统计信息过期的分区统计信息，同时采用增量的方式推导 `GLOBAL` 级别统计信息。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
