操作前检查
1. 确认是否有足够的空间进行 DDL 操作。
查看进行 DDL 操作的表当前占用的空间,并通过当前实例的磁盘使用率判断是否有足够的空间进行 DDL 操作。
SELECTtable_name AS '表名',ROUND((data_length + index_length) / 1024 / 1024, 2) AS '总空间(MB)',ROUND(data_length / 1024 / 1024, 2) AS '数据空间(MB)',ROUND(index_length / 1024 / 1024, 2) AS '索引空间(MB)',ROUND(data_free / 1024 / 1024, 2) AS '碎片空间(MB)'FROM information_schema.TABLESWHERE table_schema = '数据库名'AND table_name = '表名';
说明:
2. 查看同名表是否有超长数据的慢查询。
SELECT * FROM information_schema.processlist WHERE INFO LIKE "%表名%" ORDER BY TIME_MS DESC LIMIT 10;
若有,则等慢查询结束后再执行 DDL。
3. 针对大单表,查看数据分布,确认 IO 压力。
SELECTSUM(region_stats_approximate_size) AS size,COUNT(b.rep_group_id) AS region_nums,sql_addr,c.leader_node_name,b.rep_group_idFROMinformation_schema.META_CLUSTER_DATA_OBJECTS aJOIN information_schema.META_CLUSTER_REGIONS bJOIN information_schema.META_CLUSTER_RGS cJOIN information_schema.META_CLUSTER_NODES dON a.data_obj_id = b.data_obj_idAND b.rep_group_id = c.rep_group_idAND c.leader_node_name = d.node_nameWHEREa.schema_name = '数据库名'AND a.table_name = '表名'GROUP BYrep_group_idORDER BYleader_node_name;
如果数据全部倾斜在某一个节点,建议将
max_parallel_ddl_degree
从默认8设置为4或者2,减少 DDL 并发线程以降低 IO 压力。4. 通过租户端监控指标确认 CPU/IO 负载。
建议在业务低峰期进行 DDL 操作。
操作中查看进度
-- 查看DDL,是否在执行,LAST_TIMESTAMP 若在更新,则表明 DDL 在执行,如果长时间没有更新,则可能 hang 住SELECT * FROM information_schema.ddl_jobs WHERE is_history = 0;-- 查看进度则关注 information_Schema.ddl_jobs INFO 字段中的"progress"信息ID: 13SCHEMA_NAME: tdstoreTABLE_NAME: sbtest1VERSION: 13DDL_STATUS: SUCCESSSTART_TIMESTAMP: 2025-08-08 14:29:35LAST_TIMESTAMP: 2025-08-08 14:29:35DDL_SQL: alter table tdstore.sbtest1 add index idx(v)INFO_TYPE: ALTER TABLEINFO: {"tmp_tbl":{"db":"tdstore","table":"#sql-d_1000be_6895994e0000ad_1"},"alt_type":1,"alt_tid_upd":{"tid_from":10039,"tid_to":10039},"cr_idx":[{"id":10040,"ver":4,"stat":0,"tbl_type":1,"idx_type":2}],"rm_idx":[],"init":false,"tmp_tab":false,"online_op":true,"wf_rmed":false,"online_copy_stage":0,"idx_op":true,"row_applied":true,"row_apply_saved":true,"current_schema_name":"tdstore","crt_data_obj_task_id":29437883249066288,"dstr_data_obj_task_id":0,"alt_tbl_pp_stage":0,"alt_tbl_policy_option":0,"data_obj_to_be_dstr_arr":[],"progress":"total: 1, scanned: 1 (100.00%)","fillback_mode":"ThomasWrite","exec_addr":{"ip":"10.10.10.10","port":15035},"recov_addr":{"ip":"10.10.10.10","port":15035}}IS_HISTORY: 1--通过租户端观察 CPU/IO 负载以及慢查询告警;
INFO
字段中的 progress
即是进度说明: "progress":"total: 1, scanned: 1 (100.00%)"
查看任务结果
--返回empty, 则表明 DDL job 执行结束SELECT * FROM information_schema.ddl_jobs WHERE is_history = 0;