执行Create table卡死

【 TiDB 版本】: 5.7.25-TiDB-v5.4.0
【K8s 版本】:v1.20.15
【TiDB Operator 版本】:1.3.2
【遇到的问题】:
执行一个create table命令后一直卡死,也不能用kill tidb sessionid 杀掉:

CREATE TABLE `test`  (
  `orderId` varchar(50) NOT NULL COMMENT '生产计划单号',
  `state` tinyint(3) NULL DEFAULT 10 COMMENT '状态10未裁床20部分裁床50已裁床',
  `data` json NULL COMMENT '扩展数据',
  PRIMARY KEY (`orderId`)
) COMMENT = '裁床列表';

使用SELECT ID, USER, INSTANCE, INFO FROM INFORMATION_SCHEMA.CLUSTER_PROCESSLIST order by info desc 查看进程

通过 admin show ddl jobs 查看DDL job 如下 :

state状态一直是none, 上图几个cancelling的状态是被我取消的

查看tidb日志,出现很多下面的报错,每隔十秒报一次 :

[2022/07/06 07:36:03.170 +00:00] [ERROR] [terror.go:307] ["encountered error"] [error=EOF] [stack="github.com/pingcap/tidb/parser/terror.Log\
\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/parser/terror/terror.go:307\
github.com/pingcap/tidb/server.(*Server).onConn\
\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/server/server.go:516"]
[2022/07/06 07:36:13.171 +00:00] [ERROR] [terror.go:307] ["encountered error"] [error=EOF] [stack="github.com/pingcap/tidb/parser/terror.Log\
\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/parser/terror/terror.go:307\
github.com/pingcap/tidb/server.(*Server).onConn\
\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/server/server.go:516"]
[2022/07/06 07:36:23.171 +00:00] [ERROR] [terror.go:307] ["encountered error"] [error=EOF] [stack="github.com/pingcap/tidb/parser/terror.Log\
\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/parser/terror/terror.go:307\
github.com/pingcap/tidb/server.(*Server).onConn\
\t/home/jenkins/agent/workspace/build-common/go/src/github.com/pingcap/tidb/server/server.go:516"]

为什么执行DDL命令会卡死,怎么查看是哪里的问题呢 :

集群节点信息:

我遇到过的有两种情况

  1. 前面有ddl没有执行完,解决方案:等待,或调大步长加速
  2. tidb无法选出owner节点,解决方案:重启tidb这个角色让他选出一个 tiup restart xxx -R tidb (注意:一定要全部重启)

1、怎么调大步长呢 ?
2、是不是所有tidb节点都要全部重启?

并且通过查看processlist没看到有未执行完的DDL,不过我现在这个DDL都kill不掉了

那可能就是第二种情况了,重启一下tidb节点(注意要用tiup重启整个 角色为tidb的节点,业务可能中断建议低峰期操作)

admin show ddl 看看

重启了tidb节点,还是没有选举到owner :joy:

进入三个tidb节点,使用select tidb_is_ddl_owner() 发现三个节点的都是0 ,重启了节点也没有选举到owner,使用:

curl -X POST http://10.20.186.225:10080/ddl/owner/resign
报错:This node is not a ddl owner, can't be resigned

,在这个上边运行

看看用admin cancel ddl 可不可以取消。


报错了 ,奇怪

ADMIN CANCEL DDL JOBS 12374

这个命令执行过,但是呢我是因为没有owner,现在要怎么选举出ddl的owner才行

你咋重启的,把命令贴下

我是部署的K8S, 直接kubectl delete pod

重启之后问题解决了吗?可以看看之前的日志。

你有改过TiDB集群的namespace么?是不是TiDB内部记录的内部域名已经不对了?

pd 循环delete

感觉你的pd集群已经出问题了,可以看看pd节点的日志。

怎么看出来pd循环delete了