# 在线 DDL 相关模块

__*在线 DDL*__

![`smart`](./student-guide/diagram/OnlineDDLRelatedModules_aa_001_20220509.png)
-------------------------------------------------------------
TiDB 数据库支持 online DDL ,也就是 DDL 操作不会锁表,DML 语句是不会阻塞的。下面,我们一起来看一下 DDL 的执行所需要的各个模块。

首先,整个 TiDB 数据库同一时刻只允许一个 TiDB server 做 DDL 操作。每一个 TiDB server 中都有一个 worker 模块,这个 worker 模块负责处理 DDL 操作,只有当前 TiDB server 的角色为 owner 时才会启用。

如果您的 TiDB 数据库中有多个 TiDB server,那么这些 TiDB server 会按照一个固定时间轮流（通过选举的方式）成为 owner 角色,这个时间就叫做任期,当一个 TiDB server 是 owner 角色并且在任期中,它的 worker 模块就可以处理 DDL 操作。

数据库当前的 owner 角色信息被持久化到 PD 中,woker 模块可以查看自己所在的 TiDB server 当前是否为 ownere 角色,当 owner 的任期到期后,PD 会发起并负责选举,选择新的 owner。

其次,除了 worker 模块以外,还有 load schema 模块,用于在当前 TiDB server 成为 owner 角色后加载最新的 schema 信息,这样可以保证当前 owner 角色的 TiDB server 拥有最新的 schema 信息。

最后,start job 模块负责接收 DDL 请求,为 DDL 操作分配 ID,在这里我们把每个分配了 ID 的 DDL 操作叫做 job。start job 会将 job 持久化到 TiKV 中的队列中。



