---
title: "在线统计信息收集 - OceanBase 数据库 V4.1.0 | OceanBase 文档中心"
description: 在线统计信息收集 在线统计信息收集指在执行 INSERT 插入时，数据库优化器就可以收集统计信息，不用手动调用系统包。在批量导入数据的过程中，可以实时收集统计信息，不需要额外的发起收集任务，减少了运维操作，提高统计信息收集性能。 OceanBase 数据库使用 GATHER_OPTIMIZER_STATISTICS …
---
切换语言

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

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

# 在线统计信息收集

更新时间：2025-05-06 18:16:42

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.1.0/zh-CN/700.reference/300.performance-tuning-guide/500.sql-optimization/400.sql-optimization/400.optimizer-statistics/200.statistics-collection-methods/500.online-statistics-collection.md)  

在线统计信息收集指在执行 `INSERT` 插入时，数据库优化器就可以收集统计信息，不用手动调用系统包。在批量导入数据的过程中，可以实时收集统计信息，不需要额外的发起收集任务，减少了运维操作，提高统计信息收集性能。

OceanBase 数据库使用 `GATHER_OPTIMIZER_STATISTICS`/`NO_GATHER_OPTIMIZER_STATISTICS` Hint 和系统变量 `_optimizer_gather_stats_on_load`（默认开启）进行在线统计信息收集，同时也可以使用旁路导入功能的 `APPEND` Hint 实现在线统计信息收集。

#### 说明

`_optimizer_gather_stats_on_load` 为内部系统变量，默认开启。

在线统计信息收集的主要触发场景如下：

- `CREATE TABLE...AS SELECT`（即 CTAS）

  在系统变量 `_optimizer_gather_stats_on_load` 为 True 时，CTAS 默认启动在线收集统计信息功能。如果需要禁用该功能，可以使用 `NO_GATHER_OPTIMIZER_STATISTICS` Hint，示例如下：

  ```sql
  CREATE TABLE table_name AS SELECT /*+NO_GATHER_OPTIMIZER_STATISTICS*/* FROM...

  ```
 - `INSERT INTO SELECT`

  在系统变量 `_optimizer_gather_stats_on_load` 为 True 时，使用 `GATHER_OPTIMIZER_STATISTICS` Hint 或者 `APPEND` Hint 启动在线收集统计信息功能。 示例如下：

  ```sql
  INSERT /*+GATHER_OPTIMIZER_STATISTICS*/ INTO table_name SELECT * FROM table_name

  ```

  #### 注意

  OceanBase 数据库暂不支持通过 `INSERT /*+GATHER_OPTIMIZER_STATISTICS*/ INTO table_name VALUES()...` 语句在线收集统计信息。
 - PDML

  通过 `ENABLE_PARALLEL_DML` Hint 或者通过 `ALTER SESSION ENABLE PARALLEL DML;` 设置系统并行模式的方式让插入操作以并行的方式进行。

  示例如下：

  ```shell
  CREATE TABLE t1(c1 INT) PARTITION BY HASH(c1) PARTITIONS 4;
  CREATE TABLE t2(c1 INT) PARTITION BY HASH(c1) PARTITIONS 4;
  INSERT INTO t1 VALUES (1),(2),(3),(4);

  obclient> EXPLAIN INSERT /*+ENABLE_PARALLEL_DML PARALLEL(4)*/ INTO t2 SELECT * FROM t1;
  +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
  | Query Plan                                                                                                                                                      |
  +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
  | ================================================================================                                                                                |
  | |ID|OPERATOR                             |NAME           |EST.ROWS|EST.TIME(us)|                                                                                |
  | --------------------------------------------------------------------------------                                                                                |
  | |0 |OPTIMIZER STATS MERGE                |               |1       |16          |                                                                                |
  | |1 | PX COORDINATOR                      |               |1       |16          |                                                                                |
  | |2 |  EXCHANGE OUT DISTR                 |:EX10001       |1       |16          |                                                                                |
  | |3 |   INSERT                            |               |1       |15          |                                                                                |
  | |4 |    EXCHANGE IN DISTR                |               |1       |2           |                                                                                |
  | |5 |     EXCHANGE OUT DISTR (PKEY RANDOM)|:EX10000       |1       |2           |                                                                                |
  | |6 |      OPTIMIZER STATS GATHER         |               |1       |2           |                                                                                |
  | |7 |       SUBPLAN SCAN                  |ANONYMOUS_VIEW1|1       |2           |                                                                                |
  | |8 |        PX BLOCK ITERATOR            |               |1       |2           |                                                                                |
  | |9 |         TABLE SCAN                  |T1             |1       |2           |                                                                                |
  | ================================================================================                                                                                |
  | Outputs & filters:                                                                                                                                              |
  | -------------------------------------                                                                                                                           |
  |   0 - output(nil), filter(nil), rowset=256                                                                                                                      |
  |   1 - output([column_conv(NUMBER,PS:(-1,0),NULL,ANONYMOUS_VIEW1.C1)]), filter(nil), rowset=256                                                                  |
  |   2 - output([column_conv(NUMBER,PS:(-1,0),NULL,ANONYMOUS_VIEW1.C1)]), filter(nil), rowset=256                                                                  |
  |       dop=4                                                                                                                                                     |
  |   3 - output([column_conv(NUMBER,PS:(-1,0),NULL,ANONYMOUS_VIEW1.C1)]), filter(nil)                                                                              |
  |       columns([{T2: ({T2: (T2.__pk_increment, T2.C1)})}]), partitions(p[0-3]),                                                                                  |
  |       column_values([T_HIDDEN_PK], [column_conv(NUMBER,PS:(-1,0),NULL,ANONYMOUS_VIEW1.C1)])                                                                     |
  |   4 - output([column_conv(NUMBER,PS:(-1,0),NULL,ANONYMOUS_VIEW1.C1)], [PARTITION_ID], [T_HIDDEN_PK]), filter(nil), rowset=256                                   |
  |   5 - output([column_conv(NUMBER,PS:(-1,0),NULL,ANONYMOUS_VIEW1.C1)], [PARTITION_ID], [T_HIDDEN_PK]), filter(nil), rowset=256                                   |
  |       (#keys=1, [column_conv(NUMBER,PS:(-1,0),NULL,ANONYMOUS_VIEW1.C1)]), dop=4                                                                                 |
  |   6 - output([column_conv(NUMBER,PS:(-1,0),NULL,ANONYMOUS_VIEW1.C1)], [calc_tablet_id(PARTITION_HASH(column_conv(NUMBER,PS:(-1,0),NULL,ANONYMOUS_VIEW1.C1)))]), |
  | filter(nil), rowset=256                                                                                                                                         |
  |   7 - output([ANONYMOUS_VIEW1.C1]), filter(nil), rowset=256                                                                                                     |
  |       access([ANONYMOUS_VIEW1.C1])                                                                                                                              |
  |   8 - output([T1.C1]), filter(nil), rowset=256                                                                                                                  |
  |   9 - output([T1.C1]), filter(nil), rowset=256                                                                                                                  |
  |       access([T1.C1]), partitions(p[0-3])                                                                                                                       |
  |       is_index_back=false, is_global_index=false,                                                                                                               |
  |       range_key([T1.__pk_increment]), range(MIN ; MAX)always true                                                                                               |
  +-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
  35 rows in set

  ```

  上述示例中生成了 `OPTIMIZER STATS MERGE` 的算子，说明执行了在线统计信息收集。

用户在线收集到的统计信息可以在相应的视图中查看，视图的详细信息请参见 [统计信息收集方式概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001699691)。

示例如下：

```shell
CREATE TABLE t1(c1 INT) PARTITION BY HASH(c1) PARTITIONS 4;
CREATE TABLE t2(c1 INT) PARTITION BY HASH(c1) PARTITIONS 4;
INSERT INTO t1 VALUES (1),(2),(3),(4);
INSERT /*+ENABLE_PARALLEL_DML PARALLEL(4)*/ INTO t2 SELECT * FROM t1;

-- Oracle 模式
OceanBase(SYS@SYS)> SELECT table_name, partition_name, num_rows, avg_row_len FROM user_tab_statistics WHERE table_name='T2';
+------------+----------------+----------+-------------+
| TABLE_NAME | PARTITION_NAME | NUM_ROWS | AVG_ROW_LEN |
+------------+----------------+----------+-------------+
| T2         | NULL           |        4 |          20 |
| T2         | P0             |        1 |          20 |
| T2         | P1             |        2 |          20 |
| T2         | P2             |        1 |          20 |
| T2         | P3             |        0 |           0 |
+------------+----------------+----------+-------------+

-- MySQL 模式
OceanBase(root@test)> SELECT table_name, partition_name, num_rows, avg_row_len FROM OCEANBASE.DBA_TAB_STATISTICS WHERE table_name='T2';
+------------+----------------+----------+-------------+
| table_name | partition_name | num_rows | avg_row_len |
+------------+----------------+----------+-------------+
| t2         | NULL           |        4 |          20 |
| t2         | p0             |        1 |          20 |
| t2         | p1             |        1 |          20 |
| t2         | p2             |        1 |          20 |
| t2         | p3             |        1 |          20 |
+------------+----------------+----------+-------------+

```

 上一篇 下一篇 ![有帮助](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) 咨询热线
