我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL5.7 Online DDL

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL5.7 Online DDL

1. ALter table (5.7)

    一般情况下,alter table  都会对原有的表做一个临时的副本拷贝,然后将所做的该表应用到副本,之后再将原表删除,rename 副本。在这个过程中,原表对外是可读的;但是对该表DML会被堵塞,直到alter 完成。

    The exception referred to earlier is that ALTER TABLE blocks reads (not just writes) at the point where

it is ready to install a new version of the table .frm file, discard the old file, and clear outdated table

structures from the table and table definition caches. At this point, it must acquire an exclusive lock. To

do so, it waits for current readers to finish, and blocks new reads (and writes). 

在 alter table读取块,安装新建的.frm 。丢弃就得文件和数据时,会加排它锁。


下面操作一般不需要创建临时副本:

    1)ALTER TABLE tbl_name RENAME TO new_tbl_name without any other options ;

    2)只改变表的元数据而不改动数据时 :

        (1)列的重命名;

        (2)改变列的默认值;

        (3)对ENUM和SET列在成员列表最后添加列表(但是向具有8个成员的SET列添加成员会将所需的存储空间每个值从1个字节更改为2个字节;  在列表中间添加成员会导致现有成员重新编号,这些需要一个表副本。)

     3)表空间的丢弃和导入;

     4)索引重命名,添加和删除索引(for innodb and NDB)


2 Summary of Online Status for DDL Operations

MySQL5.7 Online DDL

(1)重命名列

    只改变列名而不改变列的属性,可以进行在线操作;

    对于修改外键所在的列,不能使用ALGORITHM=COPY选项。

(2)改变VARCHAR 列的字符长度

    若原VARCHAR列定义的长度在0-255范围内,修改后也在该范围则可以使用ALGORITHM=INPLACE;

    若原VARCHAR列定义的长度在256以上,修改后也在该范围则也可以使用ALGORITHM=INPLACE;

    但是若从小于256范围变为大于256的范围,或者varchar列长度由大变小,则会进行表的副本拷贝。

  (3)下列操作,虽然进行表的副本拷贝但是依然支持DML

    • Adding, dropping, or reordering columns.

    • Adding or dropping a primary key.

    • Changing the ROW_FORMAT or KEY_BLOCK_SIZE properties for a table.

    • Changing the nullable status for a column.

    • OPTIMIZE TABLE

    • Rebuilding a table with the FORCE option

    • Rebuilding a table using a “null” ALTER TABLE ... ENGINE=INNODB statement

  注意:若需要进行表的副本拷贝,则表副本会临时在参数tmpdir 指定的路径下。任何DDL语句都会等待当前的事务结束才会开始执行,因为在DDL执行伊始和最后都短暂的加排他锁。

  虽然对于主键的修改需要做表的副本拷贝,但是使用ALGORITHM=INPLACE是被允许的,且比ALGORITHM=COPY的效率要高。因为ALGORITHM=INPLACE 不需要记录相应的undo和redo日志,二级索引已经存储好,可以顺序load,由于没有随机的二级索引插入所以也没使用到change buffer。

  (4)DDL操作是执行了 inplace 还是copy ,最直观的表现就是查看操作完成后的“rows affected”,如下:

MySQL5.7 Online DDL (5) 对于一个大表的操作,需要确认相应DDL执行的效率:

    1). Clone the table structure.

    2). Populate the cloned table with a tiny amount of data.

    3). Run the DDL operation on the cloned table.

    4). Check whether the “rows affected” value is zero or not. A non-zero value means the operation willrequire rebuilding the entire table, which might require special planning. For example, you might do the DDL operation during a period of scheduled downtime, or on each replication slave server one at a time.

For a deeper understanding of the reduction in MySQL processing, examine the performance_schema and INFORMATION_SCHEMA tables related to InnoDB before and after DDL operations, to see the number of physical reads, writes, memory allocations, and so on.


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL5.7 Online DDL

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql之 openark-kit online ddl

MySQL工具集openark-kit (官方网站 http://code.openark.org/forge/openark-kit),内部包含很多小工具,在5.6之前用于实现online ddl操作,本文以CentOS为操作系统,且默认
2023-06-06

MySQL Online DDL原理解析

目录一、背景与意义二、工作机制1. 准备阶段2. 执行DDL操作3. 完成与清理三、实现原理与优化四、使用场景与优势五、使用约束与注意事项六、锁在Online DDL中的作用注意事项一、背景与意义在传统的数据库系统中,执行DDL操作时通常
MySQL Online DDL原理解析
2024-10-10

Mysql Online DDL的使用详解

目录正文LOCK参数ALGORITHM参数COPY TABLE流程IN-PLACE流程允许并发DML的DDL操作不允许并发DML的DDL操作正文Online DDL在MySQL 5.6才开始支持的,在5.5及之前版本,使用alter tab
2022-05-22

如何在Mysql中使用Online DDL

本篇文章为大家展示了如何在Mysql中使用Online DDL,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。LOCK参数LOCK=NONE:允许并发的查询和DML操作LOCK=SHARED:允许并发
2023-06-15

MySql Online DDL操作记录详解

目录一、环境二、执行过程分析三、遇到的问题四、工具尝试五、Online DDL 尝试一、环境为支持用户账号删除功能,需要在 user 表上加一个字段 deleted。数据库:mysql5.6被 操作表 user:数量级为100w,外键2
2022-12-20

编程热搜

目录