DDL_JOB_STAGE_INFO

最近更新时间:2025-11-18 10:10:23

我的收藏

功能

DDL 操作具有多阶段、长流程的特点,会分成多个阶段执行并且和 TDStore 有多次 RPC 交互。然而,在调试或者线上执行 DDL 时会有概率出现 DDL 卡死的现象。现在可以通过查询INFORMATION_SCHEMA.DDL_JOB_STAGE_INFO视图,展示每个正在执行的 DDL 任务的运行时信息,包括 DDL 若干阶段的耗时情况,RPC 耗时情况等,方便用户、DBA 或者内核开发人员在 DDL 卡住的时候查询该系统视图就能定位(不用特意去查看 DDL 运行日志)到当前 DDL 执行到的位置。
说明:
在 DDL 主执行节点上的推荐用法:SELECT * FROM information_schema.DDL_JOB_STAGE_INFO ORDER BY ddl_job_id\\G
在非 DDL 主执行节点上的推荐用法:/*#all_nodes */ SELECT * FROM information_schema.DDL_JOB_STAGE_INFO ORDER BY ddl_job_id\\G

字段说明

字段名
类型
描述
DDL_JOB_ID
int unsigned
当前正在执行的 DDL job id。
CURRENT_STAGE_TYPE
varchar(64)
NORMAL :代表正在执行 DDL 前台线程逻辑。
RECOVERY :代表正在执行 DDL 后台线程逻辑(例如异步 DROP Table 等等)。
CURRENT_STAGE_NAME
varchar(64)
表示当前 DDL 逻辑正在哪个函数中执行。
CURRENT_STAGE_SOURCE
varchar(64)
表示当前 DDL 执行的函数文件名和代码行数。
HISTORY_STAGE_INFOS
varchar(4096)
表示当前 DDL 执行的历史阶段信息,一般由 START_DDL_JOB 开始,到END_DDL_JOB 结束。
CURRENT_SQL_QUERY
varchar(2048)
表示当前 DDL 执行的 SQL。
DDL_START_TIME
varchar(64)
表示当前 DDL 开始执行的时间。
STAGE_START_TIME
varchar(64)
表示当前所在 stage 开始的时间。
DDL_DURATION
varchar(64)
表示当前 DDL 开始执行到现在时间节点的时间间隔。
STAGE_DURATION
varchar(64)
表示当前所在 stage 开始执行到现在时间节点的时间间隔。
DDL_ERROR_CODE
int
如果出现异常,会打印当前异常的异常码。反之,则为 NULL
DDL_ERROR_TEXT
varchar(2048)
如果出现异常,会打印当前异常的文本信息。反之,则为 NULL

示例

tdsql> SELECT * FROM information_schema.DDL_JOB_STAGE_INFO ORDER BY ddl_job_id\\G
*************************** 1. row ***************************
DDL_JOB_ID: 115
CURRENT_STAGE_TYPE: NORMAL
CURRENT_STAGE_NAME: SetDDLJobStatusSucc
CURRENT_STAGE_SOURCE: ddl_common.cc:725
HISTORY_STAGE_INFOS: [161ms][RPC 18ms][CREATE TABLE DDL][2025-09-01 15:09:37 ~ RUNNING]
├──> [OK ][25ms][RPC 1ms][START_DDL_JOB][start_ddl_job][ddl_worker.cc:994][2025-09-01 15:09:37 ~ 2025-09-01 15:09:37]
├──> [RUN][135ms][RPC 17ms][CREATE_TABLE_NO_LOCK][mysql_create_table_no_lock][sql_table.cc:9993][2025-09-01 15:09:37 ~ RUNNING]
├──> [RUN][135ms][RPC 17ms][CREATE_TABLE_IMPL][create_table_impl][sql_table.cc:9539][2025-09-01 15:09:37 ~ RUNNING]
├──> [OK ][112ms][RPC 9ms][CREATE_DATA_OBJECTS_FOR_TABLE][CreateDataObjectsForTable][data_object.cc:2150][2025-09-01 15:09:37 ~ 2025-09-01 15:09:37]
├──> [OK ][103ms][RPC 3ms][CREATE_DATA_OBJECT][CreateDataObjects][data_object.cc:1327][2025-09-01 15:09:37 ~ 2025-09-01 15:09:37]
├──> [OK ][0ms][RPC 0ms][CREATE_AUTO_INC_FOR_TABLE][CreateAutoIncForTable][auto_inc_index.cc:247][2025-09-01 15:09:37 ~ 2025-09-01 15:09:37]
├──> [OK ][5ms][RPC 4ms][CREATE_WRITE_FENCE_FOR_TABLE][CreateWriteFenceForTable][ddl_executer.cc:2480][2025-09-01 15:09:37 ~ 2025-09-01 15:09:37]
├──> [OK ][5ms][RPC 4ms][CREATE_WRITE_FENCE][CreateWriteFence][ddl_executer.cc:1269][2025-09-01 15:09:37 ~ 2025-09-01 15:09:37]
├──> [OK ][0ms][RPC 0ms][SET_DDL_JOB_STATUS_SUCCESS][SetDDLJobStatusSucc][ddl_common.cc:725][2025-09-01 15:09:37 ~ 2025-09-01 15:09:37]
CURRENT_SQL_QUERY: CREATE TABLE sbtest85(
id INTEGER NOT NULL,
k INTEGER DEFAULT '0' NOT NULL,
c CHAR(120) DEFAULT '' NOT NULL,
pad CHAR(60) DEFAULT '' NOT NULL,
PRIMARY KEY (id)
) /*! ENGINE = rocksdb */
DDL_START_TIME: 2025-09-01 15:09:37
STAGE_START_TIME: 2025-09-01 15:09:37
DDL_DURATION: 161ms
STAGE_DURATION: 3ms
DDL_ERROR_CODE: NULL
DDL_ERROR_TEXT: NULL