TiDB DDL 问题排查
1.1 修改
decimal字段长度时报错"ERROR 1105 (HY000): unsupported modify decimal column precision"。TiDB 暂时不支持修改decimal字段长度。1.2 TiDB DDL job 卡住不动/执行很慢(通过
admin show ddl jobs可以查看 DDL 进度):原因 1:与外部组件 (PD/TiKV) 的网络问题。
原因 2:早期版本(v3.0.8 之前)TiDB 内部自身负载很重(高并发下可能产生了很多协程)。
原因 3:早期版本(v2.1.15 & v3.0.0-rc1 之前)PD 实例删除 TiDB key 无效的问题,会导致每次 DDL 变更都需要等 2 个 lease(很慢)。
其他未知原因,上报 bug。
解决方法:原因 1 需要检查与外部组件的网络问题;原因 2 和 3 已经修复,需要升级到高版本;其他原因,可选择以下兜底方案进行 DDL owner 迁移。
DDL owner 迁移方案:
如果与该 TiDB 集群可以网络互通,执行重新进行 owner 选举命令:
curl -X POST http://{TiDBIP}:10080/ddl/owner/resign如果与该 TiDB 集群不可以网络互通,需旁路下线,通过
tidb-ctl工具,从 PD 集群的 etcd 中直接删除 DDL owner,之后也会重新选举:tidb-ctl etcd delowner [LeaseID] [flags] + ownerKey
1.3 TiDB 日志中报
information schema is changed的错误:报错的详细原因以及解决办法参见触发 Information schema is changed 错误的原因。
背景知识:
schema version的增长数量与每个 DDL 变更操作的schema state个数一致,例如create table操作会有 1 个版本变更,add column操作会有 4 个版本变更(详情可以参考 online schema change),所以太多的 column 变更操作会导致schema version增长得很快。
1.4 TiDB 日志中报
information schema is out of date的错误:原因 1:执行 DML 的 TiDB 被
graceful kill后准备退出,且此 DML 对应的事务执行时间超过一个 DDL lease,在事务提交的时候会报此错。原因 2:TiDB 在执行 DML 时,有一段时间连不上 PD 和 TiKV,导致 TiDB 在一个 DDL Lease(默认
45s)内没有加载新的 schema,或者 TiDB 断开与 PD 之间带keep alive设置的连接。原因 3:TiKV 压力大或网络超时,通过监控 Grafana -> TiDB 和 TiKV 节点的负载情况来确认是否是该原因。
解决方法:第 1 种原因,在 TiDB 启动时手动重试该 DML 即可;第 2 种原因,需要检查 TiDB 实例和 PD 及 TiKV 的网络波动情况;第 3 种原因,需要检查 TiKV 为什么繁忙,参考 4. TiKV 问题。




