功能
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: 115CURRENT_STAGE_TYPE: NORMALCURRENT_STAGE_NAME: SetDDLJobStatusSuccCURRENT_STAGE_SOURCE: ddl_common.cc:725HISTORY_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:37STAGE_START_TIME: 2025-09-01 15:09:37DDL_DURATION: 161msSTAGE_DURATION: 3msDDL_ERROR_CODE: NULLDDL_ERROR_TEXT: NULL