TIDB ONLINE DDL

1.TIDB ONLINE DDL 

TIDB 支持ONLINE DDL,也就是 DDL操作不会锁表,在执行DDL执行期间,增删改查这种DML语句是不会阻塞的。
ONLINE DDL 的模块分为:start job 模块,workders模块,schema load模块。还涉及持久化存储在 
TIKV集群中的三个队列数据结构,job queue 用于存储DDL任务,add index queue 用于存储加索引的DDL任务,
history queue 负责存储那些已经执行完毕的DDL操作。

用户发出DDL语句,start job 模块负责接收DDL请求,为DDL操作分配ID,通常把分配了ID 的DDL操作叫做JOB;
START JOB 会将job持久化到TIKV中的 job queue 或者 add index queue队列中。在队列中的Job等待 
worker模块取走并执行他们。
整个TIDB数据库同一时刻只允许一个TIDB SERVER 执行DDL操作,即同一时间只能有一个worker模块修改 
表的结构或者添加索引。每一个TIDB SERVER中都有一个worker模块 
每一个TIDB SERVER 中都有一个worker模块 ,只有当TIDB SERVER 的角色为Owner时才会启用。
如果TIDB 数据库 中有多个TIDB SERVER ,那么这些TIDB server会按照一个固定时间轮流成为 
owner角色,这个时间叫做任期。当一个TIDB SERVER 是owner角色并且在任期中,它的worker 
模块就可以处理DDL操作。数据库当前的OWNER角色信息被持久化到PD中,worker模块 
可以查看自己所在的TIDB SERVER 当前是否为owner角色,当owner的任期到期后,PD会发起选举,
选择新的OWNER;
当worker执行完JOB QUEUE或者 add index queue 中的某个DDL job后,就将其记录在History queue 
中,DDL语句就算是执行完毕了。
除了worker模块,还有 schema load模块,用于在当前TIDB SERVER 成为owner角色后加载最新的schema信息,
这样可以保证当前owner角色的TIDB SERVER 拥有最新的SCHEMA信息。
无论是 job queue 和 add index queue,他们的特点都是其里面的JOB只能按照先进先出的原则串行执行。
换句话说同一时刻只能有一条非加索引的DDL语句和加索引的DDL语句执行。并可以并行执行。
为什么会将DDL JOB 存储在TIKV中,主要原因是如果节点在执行DDL操作的过程中发送宕机,在数据库 
重启后,依然能够从持久化保存的队列中找到没有执行完毕的DDL JOB,继续执行。
例如索引添加到一半,断电了。重启后可以从add index queue 中找到没有执行完的索引,完成操作。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值