tidb一个表同时只能执行一个DDL语句吗?

一个表在创建索引,我同时有set tiflash副本,set tiflash副本的语句被阻塞了


同一个表上的DDL是串行的吗?理论上创建索引与set tiflash副本是不相关的事情


同一张表的DDL,是要串行的

1 个赞

我是set tiflash的DDL与create index,不是这个文档说的这3类,这3类阻塞我可以理解,要锁表吗

我理解如果set是属于一个DDL操作,那跟文档中描述的应该没区别吧,就是不知道set tiflash算不算一个DDL

关键是先执行set tiflash的DDL,在创建索引,不阻塞,不好理解

添加索引在 add index queue ,set replica 在 job queue中,理论上来说是不会阻塞,但是如果涉及到同一个操作对象,还是会串行执行。

我没执行过set tiflash,他是General DDL吗?General DDL执行很快的,你再执行add index应该就不阻塞了。你出现阻塞的情况是先执行的add index,再执行的set tiflash吧

看Jobid createtime是先加的索引后设置tiflash副本

你这个加索引操作在前,执行了几小时还没完?

目前tidb 已经支持了online ddl,但一个时间点只能有一个DDL可以执行,无论提交到哪个tidb server。

同一张表的DDL,是要串行的,由队列顺序执行

是的,串行的

主要是加索引太慢了

你先增加tiflash 再加索引 这样不卡住的

串行执行

online ddl,作业会持久化到tikv中,队列执行。

https://docs.pingcap.com/zh/tidb/stable/metadata-lock#元数据锁的概念

可能是元数据导致

下面的介绍
为了解决这个问题,在 TiDB v6.3.0 中,online DDL 算法中引入了元数据锁特性。通过协调表元数据变更过程中 DML 语句和 DDL 语句的优先级,让执行中的 DDL 语句等待持有旧版本元数据的 DML 语句提交,尽可能避免 DML 语句报错。

set tiflash 应该有两个动作,一个全量和一个增量(ps 这块我个人觉得),相当于dml

ddl是要串行的

串行的