前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL之Online DDL过程

MySQL之Online DDL过程

作者头像
AsiaYe
发布2020-01-15 15:47:28
2.6K0
发布2020-01-15 15:47:28
举报
文章被收录于专栏:DBA随笔

//

MySQL之Online DDL过程

//

昨天内容中说了不同类型的DDL操作所采用的的执行方法,以及Online DDL对系统空间的依赖,今天我们说说Online DDL的操作过程,让大家有一个更加直观的认识。

01

Online DDL的过程

从官方文档上看,online ddl操作的执行过程一般被分为3个阶段,如下:

阶段1:初始化阶段(准备阶段)

在初始化阶段,服务器将考虑存储引擎功能,语句中指定的操作以及用户指定的ALGORITHMLOCK 选项,以确定在操作期间允许多少并发 。在此阶段,将使用共享的元数据锁来保护当前表定义。

阶段2:执行

在此阶段,准备并执行该语句。元数据锁是否升级到排它锁取决于初始化阶段评估的因素。如果需要排他元数据锁,则仅在语句准备期间进行短暂锁定。

阶段3:提交阶段

在提交表定义阶段,将元数据锁升级为排它锁,以退出旧表定义并提交新表定义,在获取排它锁的过程中,如果其他事务正在占有元数据的排它锁,那么本事务的提交操作可能会出现锁等待。

每个步骤的详细过程如下:

02

Online DDL失败的情况

昨天的文章中说道,Online DDL失败的情况没有给出样例,但是官方文档上给出了可能失败的几种情况:

1、手工指定的algorithm和存储引擎中的算法出现冲突

2、在一些必须使用排它锁的场合手工指定锁的类型为share或者为none

3、需要拷贝表的时候系统磁盘空间溢出或者DDL过程中的并发DML临时日志文件过大导致超过了参数innodb_online_alter_max_size的值

4、当前系统有不活跃的事务占用了元数据锁,导致锁等待超时

5、DDL添加唯一二级索引的时候,并发DML中插入了重复键值的记录,此时会造成alter table的操作回滚

03

Online DDL的一些限制

1、使用lock=none模式的时候,不允许有外键约束,如果表中有外键的时候,使用Online DDL会出现一些问题

2、持有元数据锁的其他事务可能导致Online DDL阻塞,Online DDL可能导致其他需要获取元数据锁的事务超时

3、执行Online DDL的执行线程和并行DML不是同一个执行线程,所以并行的DML在执行过程中可能会报错,Duplicate Key的错误,类似前天文章中的错误一样:

大表Online-DDL操作问题初探

4、optimize table操作会使用重建表的方法来释放聚集索引中未使用的空间,它类似alter table的操作,因为要重建表,它的处理效率不高。

5、再对大表进行online ddl的操作时,还需要注意以下3点:

a、没有任何操作能够停止Online DDL操作或者限制该操作过程中IO和磁盘使用率

b、一旦中间发生问题,回滚的代价非常昂贵

c、大表的Online DDL会导致复制出现巨大的延迟,这一点在主从复制架构中需要考虑到

综上所述,在对大表进行Online DDL的时候,有两种方法:

1、使用pt-osc或者gh-ost等在线变更的工具进行变更√

2、提前准备好故障报告,直接在线上进行变更,该方法纯属娱乐:)×

相关文章:

大表Online-DDL操作问题初探

MySQL之Online DDL再

有帮助的话还希望点下再看哈

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档