• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Mysql Online DDL的使用详解

    正文

    Online DDL在MySQL 5.6才开始支持的,在5.5及之前版本,使用alter table/create index等命令进行表结构修改操作均会锁表,这在生产环境上明显是不可接受的。

    在MySQL 5.7,Online DDL在性能和稳定性上不断得到优化,性能有显著优势,且对业务负载影响小,停写时间可控,相对pt-osc/gh-ost来说,无需安装第三方依赖包,同时支持Inplace算法的Online DDL,由于无需拷表,所需磁盘空间也更小。

    先来看一个常见的DDL语句:

    ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;
    

    其中,LOCK描述了DDL期间运行的并发程度,ALGORITHM描述了DDL的实现方式

    LOCK参数

    1. LOCK=NONE:允许并发的查询和DML操作
    2. LOCK=SHARED:允许并发的查询,但阻塞DML操作
    3. LOCK=DEFAULT: 由系统决定,允许尽可能多的并发性(并发查询、DML或两者)。如果省略LOCK子句相当于指定LOCK=DEFAULT
    4. LOCK=EXCLUSIVE:阻塞并发查询和DML操作。

    ALGORITHM参数

    1. ALGORITHM=COPY:采用拷表方式进行表变更,与pt-osc/gh-ost类似;
    2. ALGORITHM=INPLACE:仅需要进行引擎层数据改动,不涉及Server层;

    COPY TABLE流程

    1. 首先建立临时表,表结构为ALTAR TABLE更改后的结构
    2. 将原表中数据导入到临时表(server层创建临时表,会有显示的IBD文件)
    3. 删除原表
    4. 将临时表rename为原来的表名

    同时这一过程中,为了保持数据的一致性,中间复制数据时(Copy Table)全程锁表只读,如果有写请求进来将无法提供服务,将导致连接数爆张。

    IN-PLACE流程

    1. 建立一个临时文件,扫描原表主键的所有数据页
    2. 用数据页中原表记录生成B+树,存储到临时文件中(innodb_temp_data_file_path临时表空间下创建临时文件)
    3. 生成临时文件的过程中,将所有对原表的操作记在一个日志文件(rowlog)中
    4. 临时文件生成后,将日志文件中的操作应用到临时文件,得到一个辑数据上与原表相同
    5. 数据文件(日志文件记录和重放操作)
    6. 用临时文件替换原表数据文件

    这一过程中,alter 语句在启动的时候获取MDL写锁,但是这个写锁在真正拷贝数据之前就退化成读锁,也就是说在最耗时的copy数据到临时文件的过程中,原表是可以进行dml操作的,仅仅会在最后的新旧表切换阶段加锁,这个rename的时间就非常快了。

    允许并发DML的DDL操作

    标记为expensive cost的操作虽然允许OnlineDDL,但本身对服务器IO,CPU都会造成较高负担,同时会导致复制阻塞,造成另一种形式的从库复制延迟,所以如果是大表,建议业务低峰期执行

    不允许并发DML的DDL操作

    以上就是Mysql Online DDL的使用详解的详细内容,更多关于Mysql Online DDL的使用的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • MySQL8.0 如何快速加列
    • MySQL DDL 引发的同步延迟该如何解决
    • 详解MySQL8.0原子DDL语法
    • MySQL在线DDL工具 gh-ost的原理解析
    • MySQL ddl语句的使用
    • Mysql DDL常见操作汇总
    • 解析MySQL8.0新特性——事务性数据字典与原子DDL
    • MySQL数据定义语言DDL的基础语句
    • MySQL8.0 DDL原子性特性及实现原理
    • MySQL在线DDL gh-ost使用总结
    • 解决MySQL 5.7中定位DDL被阻塞的问题
    • MySQL8.0新特性之支持原子DDL语句
    • MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法
    • MySQL 8.0 Online DDL快速加列的相关总结
    上一篇:MySQL 存储过程的优缺点分析
    下一篇:MySQL 8.0 之不可见列的基本操作
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Mysql Online DDL的使用详解 Mysql,Online,DDL,的,使用,详解,