文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL5.7 Online DDL

2024-04-02 19:55

关注

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯