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

OceanBase 4.1 开始,查看索引创建任务有了更简单的方式,并且还可以查看进度!

394

本文适用于 OceanBase 4.1 及以上版本索引状态查看。

OceanBase 1.4.x~3.2.x 版本需要通过其他方法,详见 OceanBase 1.4.x ~ 3.2.x 索引状态查看


GV$SESSION_LONGOPS 视图

OceanBase 4.1 版本开始,您可以通过 GV$SESSION_LONGOPS 视图查看数据库内部耗时任务。索引创建过程是一个可能耗时较久的过程,索引创建所处的阶段、进度信息会维护在此视图。

视图 GV$SESSION_LONGOPS 字段含义如下。

列名类型说明
SIDbigint(20)Session ID
OPNAMEvarchar(128)具体 DDL 操作名
TARGETvarchar(128)DDL操作对象
SVR_IPvarchar(46)机器 IP
SVR_PORTbigint(20)机器 Port
START_TIMEbigint(20)开始时间
ELAPSED_SECONDSdecimal(24,4)已消耗时间
TIME_REMAININGbigint(20)预估剩余时间
LAST_UPDATE_TIMEbigint(20)记录更新时间
MESSAGEvarchar(500)补充信息
TRACE_IDvarchar(64)Trace ID


观测索引创建过程

建索引的主要时间一般发生在索引数据补全,在某些环境,可能因为建索引的时候,还有并发的事务未执行完成,也有可能在等待事务结束部分,我们的进度观测例子中主要展示下这两个部分的进度。

等待事务结束阶段

索引创建任务处于等待事务结束阶段样例

obclient> select * from oceanbase.gv$session_longops \G
*************************** 1. row ***************************
             SID: -1
        TRACE_ID: YE5186458A15C-0005EF63AE10FBBB-0-0
          OPNAME: create index
          TARGET: __idx_500005_i1
          SVR_IP: 
        SVR_PORT: 58648
      START_TIME: 2023-06-09
 ELAPSED_SECONDS: 7
  TIME_REMAINING: 0
LAST_UPDATE_TIME: 2023-06-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 字段来查询对应的事务信息。


数据补全阶段

您可以通过行数统计指标判断索引创建任务的整体进度,本章通过一个查询样例解释字段和进度指标。

索引创建任务处于数据补全阶段样例

obclient> select * from oceanbase.gv$session_longops \G
*************************** 1. row ***************************
             SID: -1
        TRACE_ID: YFDE80BA2DA8D-0005FDA8116C1F4E-0-0
          OPNAME: create index
          TARGET: 500097
          SVR_IP: 127.1
        SVR_PORT: 65000
      START_TIME: 2023-06-09 17:10:42
 ELAPSED_SECONDS: 5
  TIME_REMAINING: 0
LAST_UPDATE_TIME: 2023-06-09 17:10:48
         MESSAGE: TENANT_ID: 1004, TASK_ID: 541, STATUS: REPLICA BUILD, ROW_SCANNED: 2000000, ROW_SORTED: 4000000, ROW_INSERTED: 503316
1 row in set (0.03 sec)

GV$SESSION_LONGOPS 字段含义

对于索引创建任务而言, 各字段含义如下

  • TRACE_ID: observer程序日志的ID,可以用该ID来搜索相关的日志文件
  • OPNAME:建索引时,会展示 create index
  • TARGET:建索引时,展示正在创建的索引名
  • SVR_IP: 调度任务在哪个 OBServer 执行
  • SVR_PORT:调度任务在哪个 OBServer 执行
  • START_TIME:索引构建开始时间,这里只精确到日期,跟Oracle是兼容的
  • ELAPSED_SECONDS: 索引构建执行的时间,单位为秒
  • TIME_REMAINING: 剩余时间预测,兼容 Oracle,暂时还没有实现
  • LAST_UPDATE_TIME: 统计信息收集的时间,精确到日期,兼容 Oracle
  • MESSAGE:里面包含了索引任务的具体信息,最重要的字段!


MESSAGE 字段信息详细说明

索引创建任务 MESSAGE 内部字段说明

  • TENANT_ID 为租户ID
  • TASK_ID 为 DDL 的任务ID
  • STATUS 为 DDL 执行到的状态,如 REPLICA BUILD 指的是数据补全阶段


索引数据补全阶段的行数统计

数据补全主要分为 3 个阶段,处理行数统计字段分别为

阶段行数统计指标说明
扫描主表数据ROW_SCANNED
排序ROW_SORTED排序阶段可能会进行多轮归并,所以 ROW_SORTED 的行数通常比 ROW_SCANNED 和 ROW_INSERTED 大,耗时也更久
写入到索引表ROW_INSERTED

上述样例中 ROW_SCANNED: 2000000, ROW_SORTED: 4000000, ROW_INSERTED: 503316 。

可以判断出:

  • 数据补全的扫描主表、排序步骤已经完成,已进入最后一步写入到索引表阶段;
  • 数据总行数为 2000000,写入到索引表已经完成 503316,写入到索引表进度百分比为 503316/2000000,大约为 25%。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论