请问一下,8.5.4版本,对一个表加了索引和字段后,admin show ddl job 的状态一直为DONE,无法变成synced,请问这是为啥啊
DONE:当前执行 DDL 的 TiDB 节点已完成结构变更、数据回填(加索引 / 加字段),本地元数据生效。
synced:集群内所有 TiDB Server 节点全部拉取同步到这条 DDL 元数据,才算完全闭环。
一直卡在 DONE = 部分 TiDB 实例迟迟未同步这条 DDL 元信息。
- Owner 进程 CPU 打满、OOM、网络断连、磁盘满卡死;
- Owner 节点重启但未重新抢到 Owner 权限,无节点执行元数据同步广播逻辑; Owner 不推送 Schema 版本变更信号,其他 TiDB 不会刷新本地缓存,synced 永远为 0。
检查 DDL Owner、各节点 schema 版本、长事务、网络日志,等待 lease 超时或重选 Owner、重启节点即可
实在不行只能重启,或者一直等
DDL 显示 DONE 但不进入 synced,是部分 TiDB 节点未同步元数据,多由长事务阻塞、节点负载 / 网络异常、PD lease 问题导致。
说明有 tidb 无法 sync,然后查下为啥无法 sync
跨版本问题源于优化器规则和存储引擎层变更。
单节点完成 DDL,但集群部分节点未同步元数据,大概 DDL Owner 异常、长事务、网络 / 负载、租约问题导致。
1 个赞