11|表太大了,修改表结构太慢怎么解决?(上)
俊达
你好,我是俊达。
平时我们使用 MySQL,或多或少都会遇到 DDL 的需求。比如有新业务上线,需要给现有的表添加新的字段;或者需要调整索引来优化性能;或者现有的表可能存在大量碎片,需要优化表,收缩空间。
那么对现有的业务表执行各类 DDL 操作时,需要多少时间才能执行完成?执行的过程中是否会锁表,应用程序在 DDL 执行的过程中是否能正常读写数据?DDL 操作是否会消耗大量资源,影响数据库的性能?特别是当操作的表特别大,或者应用系统的可用性要求特别高的时候,这些问题就特别重要。
这一讲我们就来详细地分析 MySQL 中各类 DDL 操作具体是如何执行的。如何在完成 DDL 的同时,尽量减少对业务系统的影响。
有些 DDL 只需要修改元数据,不影响表中实际存储的数据,这些操作通常很快就能完成。有些 DDL 需要重建表,执行过程中需要复制整个表的数据,这些 DDL 的开销比较大。从 MySQL 5.6 开始,InnoDB 存储引擎逐渐支持了 Online DDL,很多 DDL 操作,在重建表的过程中可以尽量不锁表,减少对应用系统的影响。但也有一些 DDL,在执行的整个过程中都需要锁表,应用程序只能读取数据,无法修改数据。还有一些 DDL 操作,主要是创建索引,在执行期间不需要重建表,但需要扫描整个表的数据,按索引字段对数据进行排序,构建新的索引。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. MySQL 8.0中新增了Instant DDL特性,解决了加字段需要重建表的问题,提高了效率。 2. Instant DDL有一些限制,同一个表对instant加字段或删除字段的操作次数是有限制的,超过限制后需要使用inplace或copy的方式加字段。 3. Instant DDL的实现与InnoDB的元数据和行记录格式相关,通过Debug版本的MySQL可以查看InnoDB的元数据。 4. 元数据中记录了一个表有哪些字段,字段的数据类型和顺序,以及对用户可见和不可见的字段。 5. Instant DDL的实现方式和限制对于表的行版本数有关,达到行版本限制后需要使用inplace或copy的方式加字段。 6. Instant DDL的实现方式对于查询数据和写入数据有特殊的地方,需要注意元数据的存储和访问方式。 7. Instant DDL的实现方式对于表的行版本数有限制,达到限制后需要使用其他方式加字段。 8. Instant DDL的实现方式需要使用Debug版本的MySQL,并设置特定的会话变量才能查看InnoDB的元数据。 9. 元数据中记录了表的字段信息,包括可见和不可见的字段,以及字段的版本信息. 10. Instant DDL的实现方式对于表的行版本数有限制,需要注意表的行版本数达到限制后的处理方式。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 运维实战课》,新⼈⾸单¥59
《MySQL 运维实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论