---
title: "DDL 执行进度监控指南 - OceanBase 数据库 V4.3.5 | OceanBase 文档中心"
description: DDL 执行进度监控指南 在生产环境中，DDL 执行时间较长且执行过程不透明是常见问题。为解决此问题，OceanBase 数据库 V4.1 引入了 DDL 实时执行进度监控功能，将 DDL 执行进度信息展示到 GV$SESSION_LONGOPS 视图中。更多信息，参考 GV$SESSION_LONGOPS 。 本文…
---
切换语言

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

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

# DDL 执行进度监控指南

更新时间：2026-04-07 20:57:20

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.5/zh-CN/700.reference/100.oceanbase-database-concepts/700.user-interface-and-query-language/100.SQL/200.sql-statement/210.DDL-progress.md)  

在生产环境中，DDL 执行时间较长且执行过程不透明是常见问题。为解决此问题，OceanBase 数据库 V4.1 引入了 DDL 实时执行进度监控功能，将 DDL 执行进度信息展示到 `GV$SESSION_LONGOPS` 视图中。更多信息，参考 [GV$SESSION_LONGOPS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002014944)。

本文介绍如何监控 DDL 执行过程并诊断常见问题。本文通过建索引、添加主键和删列三个典型场景说明 `GV$SESSION_LONGOPS` 的监控功能。建索引为单独 DDL 任务，添加主键为具有父子关系的 DDL 任务，删列同样具有父子关系但使用非排序方式进行数据补全。

监控过程需创建两个会话：一个用于执行 DDL 操作，另一个用于查询 `GV$SESSION_LONGOPS` 视图。两个会话均使用普通租户身份登录系统。

您可以使用以下语句查看 `GV$SESSION_LONGOPS` 视图中的字段：

```sql
SELECT * FROM oceanbase.gv$session_longops\G

```

## 观测建索引

建索引操作主要耗时在索引数据补全阶段。在特定环境下，建索引过程可能受到并发事务的影响。以下分别说明等待事务结束和数据补全两个阶段的进度监控。

### 等待事务结束阶段

```sql
*************************** 1. row ***************************
             SID: -1
        TRACE_ID: YE5186458A15C-0005EF63AE10FBBB-0-0
          OPNAME: create index
          TARGET: __idx_500005_i1
          SVR_IP: xxx.xx.xxx.xx
        SVR_PORT: 58648
      START_TIME: 2022-12-09
 ELAPSED_SECONDS: 7
  TIME_REMAINING: 0
LAST_UPDATE_TIME: 2022-12-09
         MESSAGE: TENANT_ID: 1004, TASK_ID: 2, STATUS: WAIT TRANS END, PENDING_TX_ID: 76

```

在等待事务结束阶段，MESSAGE 字段显示 `WAIT TRANS END` 状态，并展示第一个未结束事务的 ID（例如：PENDING_TX_ID: 76）。您可通过查询 `__all_virtual_trans_stat` 表中对应 `trans_id` 获取详细事务信息。

### 事务补全阶段

```sql
*************************** 1. row ***************************
             SID: -1
        TRACE_ID: YE5186458A15C-0005EF60F182F228-0-0
          OPNAME: create index
          TARGET: __idx_500008_i1
          SVR_IP: xxx.xx.xxx.xx
        SVR_PORT: 58648
      START_TIME: 2022-12-09
 ELAPSED_SECONDS: 38
  TIME_REMAINING: 0
LAST_UPDATE_TIME: 2022-12-09
         MESSAGE: TENANT_ID: 1004, TASK_ID: 6, STATUS: REPLICA BUILD, ROW_SCANNED: 10000000, ROW_SORTED: 19771966, ROW_INSERTED: 0

```

数据补全阶段，MESSAGE 字段包含以下关键信息：

- TENANT_ID: 租户标识符
 - TASK_ID: DDL 任务标识符
 - STATUS: 当前执行状态，`REPLICA BUILD` 表示处于数据补全阶段
 - ROW_SCANNED: 已扫描主表数据行数
 - ROW_SORTED: 排序处理的行数
 - ROW_INSERTED: 已写入索引表的行数

由于排序过程可能涉及多轮归并操作，`ROW_SORTED` 值通常大于 `ROW_SCANNED` 和 `ROW_INSERTED`。

### 列存版本特性

列存版本引入后，数据补全监控发生变化。系统区分列存表和行存表，其中列存版本之前的表及行列混存表均视为行存表。

数据补全过程差异：

- 行存表：数据写入临时文件后直接写入宏块
 - 列存表：数据写入临时文件后，需进一步写入列存 SS Table，总行数为 column_group_cnt * row_count

补数据阶段 MESSAGE 信息示例：

- 行存表：`TENANT_ID: 1004, TASK_ID: 4514, STATUS: REPLICA BUILD, ROW_SCANNED: 779, ROW_SORTED: 0, ROW_INSERTED: 0`
 - 列存表：`TENANT_ID: 1004, TASK_ID: 6064, STATUS: REPLICA BUILD, ROW_SCANNED: 100000, ROW_SORTED: 200000, ROW_INSERTED_TMP_FILE: 100000, ROW_INSERTED_SSTABLE: 500000 out of 500000 done`

## 观测添加主键

添加主键操作与索引构建不同，在添加主键的数据补全阶段，`GV$SESSION_LONGOPS` 中显示两条记录：一条记录表示主表上的索引补全，另一条记录表示主表本身的变更。各字段含义与索引构建过程类似。

```sql
*************************** 1. row ***************************
             SID: -1
        TRACE_ID: YE5186458A15C-0005EF60F182F22F-0-0
          OPNAME: create index
          TARGET: __idx_500030_i1
          SVR_IP: xxx.xx.xxx.xx
        SVR_PORT: 58648
      START_TIME: 2022-12-09
 ELAPSED_SECONDS: 6
  TIME_REMAINING: 0
LAST_UPDATE_TIME: 2022-12-09
         MESSAGE: TENANT_ID: 1004, TASK_ID: 8, STATUS: REPLICA BUILD, ROW_SCANNED: 5518389, ROW_SORTED: 0, ROW_INSERTED: 0
*************************** 2. row ***************************
             SID: -1
        TRACE_ID: YE5186458A15C-0005EF60F182F22F-0-0
          OPNAME: add primary key
          TARGET: t1
          SVR_IP: xxx.xx.xxx.xx
        SVR_PORT: 58648
      START_TIME: 2022-12-09
 ELAPSED_SECONDS: 63
  TIME_REMAINING: 0
LAST_UPDATE_TIME: 2022-12-09
         MESSAGE: TENANT_ID: 1004, TASK_ID: 7, STATUS: COPY DEPENDENT OBJECTS, CHILD TASK IDS: [ 8 ]

```

## 观测删列

```sql
*************************** 1. row ***************************
             SID: -1
        TRACE_ID: YE5186458A15C-0005EF60F182F240-0-0
          OPNAME: drop column
          TARGET: t1
          SVR_IP: xxx.xx.xxx.xx
        SVR_PORT: 58648
      START_TIME: 2022-12-09
 ELAPSED_SECONDS: 26
  TIME_REMAINING: 0
LAST_UPDATE_TIME: 2022-12-09
         MESSAGE: TENANT_ID: 1004, TASK_ID: 13, STATUS: COPY DEPENDENT OBJECTS, CHILD TASK IDS: [ 14 ]
*************************** 2. row ***************************
             SID: -1
        TRACE_ID: YE5186458A15C-0005EF60F182F240-0-0
          OPNAME: create index
          TARGET: __idx_500076_i1
          SVR_IP: xxx.xx.xxx.xx
        SVR_PORT: 58648
      START_TIME: 2022-12-09
 ELAPSED_SECONDS: 8
  TIME_REMAINING: 0
LAST_UPDATE_TIME: 2022-12-09
         MESSAGE: TENANT_ID: 1004, TASK_ID: 14, STATUS: REPLICA BUILD, ROW_SCANNED: 10000000, ROW_SORTED: 213098, ROW_INSERTED: 0

```

删列操作的数据补全不涉及排序阶段，因此 `MESSAGE` 字段中仅包含 `ROW_SCANNED` 和 `ROW_INSERTED` 信息。类似操作还包括中间位置添加非生成列等。

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