tidb的ddl是串行的吗?

TiDB 的 DDL 通过实现 Google F1 的在线异步 schema 变更算法,来完成在分布式场景下的无锁,在线 schema 变更。为了简化设计,TiDB 在同一时刻,只允许一个节点执行 DDL 操作。用户可以把多个 DDL 请求发给任何 TiDB 节点,但是所有的 DDL 请求在 TiDB 内部是由 owner 节点的 worker 串行执行的。

  • worker:每个节点都有一个 worker 用来处理 DDL 操作。
  • owner:整个集群中只有一个节点能当选 owner,每个节点都可能当选这个角色。当选 owner 后的节点 worker 才有处理 DDL 操作的权利。owner 节点的产生是用 Etcd 的选举功能从多个 TiDB 节点选举出 owner 节点。owner 是有任期的,owner 会主动维护自己的任期,即续约。当 owner 节点宕机后,其他节点可以通过 Etcd 感知到并且选举出新的 owner。

下图描述了一个 DDL 请求在 TiDB 中的简单处理流程:

1 个赞

tikv中有两个ddl job queue,一个是add index的队列,另一个是其他ddl操作的队列,所以严格来说,所有的ddl操作并不是串行的

6.2 * 引入新的 DDL 并行执行框架,减少 DDL 阻塞,大幅提升执行效率。

我这个参数是开启的### tidb_enable_concurrent_ddl,但是执行过程中使用adm show ddl jobs 看到还是在多个ddl在等待,并且创建索引的时候全局会慢点

测试验证没问题

是设置了这个参数就可以吗?

是的,6.2 才开始有的

难道我这是从4.0一步一步升级过来的,内核不支持吗? :innocent:

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。