# 执行 DDL (B)

![center](./student-guide/diagram/05-DDL-execution-01-02.png)
-------------------------------------------------------------
当 owner 角色的 TiDB Server 中 worker 模块开始处理 job 时，会先从 TiKV 中读取 job，这个 job 被持久在队列中。下面介绍一下 TiKV 中的队列：

job queue：是 TiKV 中持久化未执行 job 的队列数据结构，每个 TiDB 数据库只有一个。

job history queue：是 TiKV 中持久化存放已经处理完毕 job 的队列数据结构，每个 TiDB 数据库只有一个。

所以，worker 进程会从 job queue 中取出第一个未执行的 job 去执行，执行完毕后，将 job 放入 job history queue 以备查询。

当 job 在执行的过程中，会经历 none，delete only，write only，write reorganizaton（delete reorganization），public 几个状态来保证 DDL 语句可以不锁表。详细原理可以参考： Google F1 的在线异步 schema 变更算法实现