iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Mysql Online DDL的使用详解
  • 841
分享到

Mysql Online DDL的使用详解

MysqlOnlineDDLMysqlOnlineDDL的使用 2022-05-22 22:05:19 841人浏览 安东尼
摘要

目录正文LOCK参数ALGoRITHM参数COPY TABLE流程IN-PLACE流程允许并发DML的DDL操作不允许并发DML的DDL操作正文 Online DDL在Mysql 5.6才开始支持的,在5.5及之前

目录
  • 正文
  • LOCK参数
  • ALGoRITHM参数
  • COPY TABLE流程
  • IN-PLACE流程
  • 允许并发DML的DDL操作
  • 不允许并发DML的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操作

  • 创建/新增二级索引
  • 重命名二级索引
  • 删除二级索引
  • 改变索引类型(USING {BTREE | HASH})
  • 添加主键(expensive cost)
  • 删除主键并增加另一个(expensive cost)(ALTER TABLE tbl_name DROP PRIMARY KEY, ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;)
  • 新增列 (expensive cost)
  • 删除列 (expensive cost)
  • 重命名列
  • 列重新排序 (expensive cost)
  • 改变列默认值
  • 删除列默认值
  • 改变列自增值
  • 设置列属性null/not null (expensive cost)
  • 修改枚举或集合列的定义
  • Change ROW_FORMAT
  • Change key block size

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

不允许并发DML的DDL操作

  • 添加全文索引
  • 添加空间索引
  • 删除主键
  • 改变列数据类型
  • 添加自增列(新增列->变为自增列)
  • 变更表字符集
  • 修改数据类型长度
    • 特例:varchar字符长度从10变更到小于255 采用inplace方式不会锁表;从255变更到10会锁表;

以上就是Mysql Online DDL的使用详解的详细内容,更多关于Mysql Online DDL的使用的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Mysql Online DDL的使用详解

本文链接: https://www.lsjlt.com/news/10351.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Mysql Online DDL的使用详解
    目录正文LOCK参数ALGORITHM参数COPY TABLE流程IN-PLACE流程允许并发DML的DDL操作不允许并发DML的DDL操作正文 Online DDL在MySQL 5.6才开始支持的,在5.5及之前...
    99+
    2022-05-22
    Mysql Online DDL Mysql Online DDL的使用
  • 【MySQL】Online DDL详解
    目录 前言一、分类二、Copy三、Inplace四、Instant五、一些补充六、总结 前言 一天,一位许久未见的澳同学,一见面先不是打招呼,直接给我当面一问 澳同学问我:小涛小涛,我这一...
    99+
    2023-08-31
    mysql 数据库 database
  • MySQL DDL执行方式Online DDL详解
    目录1 引言2 概述3 介绍4 用法5 两种算法第一种 Copy第二种 Inplace6 执行过程7 踩坑8 限制9 总结1 引言 一般来说mysql分为DDL(定义)和DML(操作)。 DDL:Data Definit...
    99+
    2022-09-22
  • MySQL DDL执行方式Online DDL详解
    目录1 引言2 概述3 介绍4 用法5 两种算法第一种 Copy第二种 Inplace6 执行过程7 踩坑8 限制9 总结1 引言 一般来说MySQL分为DDL(定义)和DML(操作...
    99+
    2022-11-13
  • MySQL & MariaDB Online DDL的详解示例
    这篇文章主要介绍MySQL & MariaDB Online DDL的详解示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MySQL教程栏目介绍指导MySQL & ...
    99+
    2022-10-18
  • MySql Online DDL操作记录详解
    目录一、环境二、执行过程分析三、遇到的问题四、工具尝试五、Online DDL 尝试一、环境 为支持用户账号删除功能,需要在 user 表上加一个字段 deleted。 数据库:mysql5.6 被 操作表 ...
    99+
    2022-12-20
    MySqlOnlineDDL操作 MySqlOnlineDDL
  • 如何在Mysql中使用Online DDL
    本篇文章为大家展示了如何在Mysql中使用Online DDL,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。LOCK参数LOCK=NONE:允许并发的查询和DML操作LOCK=SHARED:允许并发...
    99+
    2023-06-15
  • 怎么理解MySQL 5.7 Online DDL Overview
    这期内容当中小编将会给大家带来有关怎么理解MySQL 5.7 Online DDL Overview,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 ...
    99+
    2022-10-19
  • MySQL online ddl工具之pt-online-schema-change怎么用
    这篇文章主要介绍MySQL online ddl工具之pt-online-schema-change怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MySQL ddl 的问题现状...
    99+
    2022-10-18
  • MySql Online DDL操作问题怎么解决
    本文小编为大家详细介绍“MySql Online DDL操作问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySql Online DDL操作问题怎么解决”文章能帮助大家解决疑惑,下面跟...
    99+
    2023-07-04
  • MySQL Online DDL的实现细节介绍
     MySQL Online DDL的实现细节共分为三个阶段: Prepare阶段 1.创建临时frm文件 2.持有EXCLUSIVE-MDL锁,禁止读写 3.根据ALTER类型,确定执行方式(co...
    99+
    2022-10-18
  • MySQL 8.0 Online DDL快速加列的相关总结
    目录问题描述MySQL Online DDL加列的历史方法01 Copy方法02 Inplace方法MySQL8.0.12 引入的Instant方法问题描述 前几天同事问了我一个问题:业务A从MySQL迁移到Mong...
    99+
    2022-05-25
    MySQL 快速加列 MySQL Online DDL
  • MySQL ddl语句的使用
    前言 SQL的语言分类主要包含如下几种: DDL 数据定义语言 create、drop、alter 数据定义语言 create、...
    99+
    2022-05-23
    MySQL ddl语句 MySQL ddl
  • MySQL的 DDL和DML和DQL的基本语法详解
    目录一、DDL(数据定义语言)二、DML(数据操作语言)三、DQL(数据查询语言)四、聚合函数前言             &nb...
    99+
    2022-07-25
    MySQL的 DDL和DML和DQL MySQL的 DDL和DML和DQL语法
  • MySQL的 DDL和DML和DQL的基本语法详解
    目录一、DDL(数据定义语言)二、DML(数据操作语言)三、DQL(数据查询语言)四、聚合函数前言          &n...
    99+
    2022-11-13
  • MySQL总结(三)DDL数据定义语言-详解
    每行语句需要选中后再执行,可以选中后按F9快捷键执行 1.1.2 具体操作 -- 直接创建数据库db1; create database db1; -- 判断数据库是否存在,如果不存在则创建数据库db2; create database...
    99+
    2021-10-12
    MySQL总结(三)DDL数据定义语言-详解
  • MySQL教程数据定义语言DDL示例详解
    目录1.SQL语言的基本功能介绍2.数据定义语言的用途3.数据库的创建和销毁4.数据库表的操作(所有演示都以student表为例)1)创建表2)修改表3)销毁表如果你是刚刚学习MyS...
    99+
    2022-11-12
  • MySQL中如何使用DDL gh-ost
    这篇文章给大家分享的是有关MySQL中如何使用DDL gh-ost的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。背景:作为一个DBA,大表的DDL的变更大部分都是使用Percon...
    99+
    2022-10-18
  • mysql中oak-online-alter-table和pt-online-schema-change的使用限制有哪些
    小编给大家分享一下mysql中oak-online-alter-table和pt-online-schema-change的使用限制有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大...
    99+
    2022-10-18
  • MySQL如何使用oak-online-alter-table工具
    这篇文章将为大家详细讲解有关MySQL如何使用oak-online-alter-table工具,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 ...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作