TiDB中的Online DDL操作需要TiDB Server节点上的 start job
、 worker
、 schema load
模块以及TiKV节点上的 job queue
和 history queue
协同完成。
TiDB数据库中,同一时刻只能有一个TiDB Server做Online DDL操作。我们把当前时刻可以执行Online DDL任务的TiDB Server称为 Owner 。
TiDB中Online DDL操作的调度流程大致如下:
- 不同用户连接到不同的TiDB Server,发出的DDL操作由 start job模块 接收,并由start job模块生成一个对应的job放到TiKV节点上的job queue队列中。
- 承担Owner角色的TiDB Server中的 worker模块 会从TiKV节点上的job queue中获取Online DDL的job来执行。执行完的job会被移动到history queue中,然后Owner接着从job queue中获取下一个job来执行。
- 当前的Owner任期结束时,会通过选举选出一个新的TiDB Server,作为新的Owner来执行Online DDL任务。同时,新的Owner中的 schema load模块 会将最新的所有表schema的信息同步到TiDB Server的缓存中。