MySQL Online DDL,还是要谨慎

online-DDL详细原理介绍及gh-ost讲解 1. MySQL online DDL 各版本介绍 1.1 online DDL in mysql 5.5 在mysql5.5版本中已经增加了in-place方式,但依然会阻塞insert,update,delete操作。 mysql 5.5 online ddl 原理: a. 按照原表的定义创建临时表; b. 对原表进行加写锁; c. 对新的临时表进行ddl操作; d. 将原表中的数据copy到临时表中; e. 释放原表的写锁; f. 将旧表删除,临时表重命名 存在的问题: a. 在进行copy da 阅读详情

640?wx_fmt=png

导读

MySQL的Online DDL长期饱受诟病,8.0之后有没有好一些呢...

本文重点讨论常见的几种Online DDL需求:

  • 增加新列(ADD COLUMN)

  • 修改列定义(MODIFY COLUMN)

  • 增加/删除索引(ADD/DROP INDEX)

其他的DDL操作相对比较少,所以本文就不讨论了。
此外,本文也不讨论非InnoDB引擎以及非普通索引(如全文索引、空间索引)的场景。

我们先看下ALTER TABLE时ALGORITHM可以指定的几种方式:

  • COPY ,是指DDL时,会生成(临时)新表,将原表数据逐行拷贝到新表中,在此期间会阻塞DML

  • INPLACE,无需拷贝全表数据到新表,但可能还是需要IN-PLACE方式(原地,无需生成新的临时表)重建整表。这种情况下,在DDL的初始准备和最后结束两个阶段时通常需要加排他MDL锁(metadata lock,元数据锁),除此外,DDL期间不会阻塞DML

  • INSTANT,只需修改数据字典中的元数据,无需拷贝数据也无需重建整表,同样,也无需加排他MDL锁,原表数据也不受影响。整个DDL过程几乎是瞬间完成的,也不会阻塞DML。这个新特性是8.0.12引入的,再次感谢腾讯互娱DBA团队的贡献

执行DDL操作时,ALGORITHM选项可以不指定,这时候MySQL按照INSTANT、INPLACE、COPY的顺序自动选择合适的模式。也可以指定ALGORITHM=DEFAULT,也是同样的效果。如果指定了ALGORITHM选项,但不支持的话,会直接报错。

当采用COPY模式时,这时表里任何的修改数据操作,DDL都会被阻塞。COPY模式下会生成临时新表,操作完成后原表会被删除,新表被重命名为原表名。当DDL开始后,原表上仅能只读,其他的DML操作也都会被阻塞。COPY过程中,唯一会阻塞只读的时机是在清理旧表结构和表定义缓存时。

1、以下是支持INPLACE模式的几种情况:

  • 本身是InnoDB表支持的online DDL操作

  • 表重命名

  • 以下几种只修改表元数据而不修改表数据的操作

    • 字段类型为CHAR、VARCHAR、TEXT、ENUM

    • 字符集从UTF8MB3变成UTF8MB4,或者从其他任何字符集改成binary

    • 修改字符集的字段上没有索引

    • 字段重命名

    • 修改字段默认值

    • 索引重命名

    • 新增、删除辅助索引

    • 修改索引的可见性

    • ENUM/SET类型字段追加新值,例如('a','b')后面增加'c',变成('a','b','c')

    • 从8.0.14开始,下面几种只修改字符集的情况

    • 从8.0.14开始,InnoDB表虚拟列(generated column)上不修改定义类型、表达式、是否允许为NULL约束,例如只修改字段备注内容(特么的这有卵用啊)

    • 修改字段的默认值,且该字段不包含在生成虚拟列的表达式内,例如只修改字段的NULL属性

2、以下是支持INSTANT模式的几种情况:

  • 在表最后新增一个字段

  • 新增或删除虚拟列

  • 新增或删除字段默认值

  • 修改ENUM/SET字段定义,上面也有提到过

  • 修改索引类型

  • 表重命名

3、几种需要用COPY模式的情况

当执行ALTER TABLE ADD COLUMN、CHANGE COLUMN、MODIFY COLUMN、ADD INDEX、FORCE 等操作时,会将5.5版本之前的时间类型相关字段强制升级到高版本,这个升级需要重建整个表,只能用COPY方式。这时如果指定 ALGORITHM=INPLACE 就会报错了。

当有联合索引并用于表分区时,如果修改了联合索引列顺序的话,也需要用COPY模式。

4、最后用一个表格说明几种常见操作的模式

操作InstantIn Place重建表可并行DML只修改元数据
新增辅助索引否是否是否
删除辅助索引否是否是是
修改索引名否是否是是
新增主键否是是是否
删除主键否否是否否
删除并同时新增主键否是是是否
新增字段是(追加式)是否是否
删除字段否是是是否
修改字段数据类型否否是否否
扩展VARCHAR列长度否是否是是
新增STORED虚拟列否否是否否
新增VIRTUAL虚拟列是是否是是
转换表字符集否否是否否
opitmize table否是是是否
修改表名是是否是是

最后有两个提醒

  1. 一般DDL操作最好都采用pt-osc或gh-ost这样的工具来实施,并且实施之前务必要先检查当前目标表上是否有事务或大查询未结束,避免严重的MDL锁等待

  2. 除了8.0以上版本,除了追加式新增列、表改名、新增虚拟列这三种支持INSTANT的操作可以直接跑DDL,其余的都统统采用pt-osc/gh-osc工具,相对更不容易出状

  3. 执行ALTER TABLE DDL时,不要节外生枝指定ALGORITHM=?, LOCK=?选项,因为MySQL会自行判断该采用哪种方式。本来可以INPLACE的,可能不小心给指定成COPY就悲剧了

延伸阅读

  • MySQL Reference Manual, 15.12.1 Online DDL Operations

  • MySQL Reference Manual, 13.1.9 ALTER TABLE Syntax, Performance and Space Requirements

  • MySQL 8.0: InnoDB now supports Instant ADD COLUMN | MySQL Server Blog

  • 杨奇龙:MySQL Online DDL思维导图 

    最后,欢迎扫码订阅《乱弹MySQL》专栏,快人一步获取我最新的MySQL技术分享 640?wx_fmt=png


雷赛控制卡全方位使用指南:从硬件连接到高级应用 雷赛控制卡以其接口简单、编程便捷、性价比高的特点,成为中小自动化设备的理想选择。使用时需注意:硬件连接需注重抗干扰设计(屏蔽线、接地);软件开发需合理配置运动参数(脉冲当量、加减速);调试阶段需充分利用 DMCStudio 工具验证性能。通过本文介绍的方法,可快速实现从硬件搭建到复杂运动控制的全流程开发,满足雕刻、切割、装配等多场景的自动化需求。 阅读详情

相关推荐

通讯模块_三菱IQ-R PLC串口通讯模块RJ71C24进行Modbus-RTU通讯

在日常的选型中,很多电气工程师咨询我,三菱iQ-R系列有没有Modbus通讯模块,我在这里可以肯定的回复您,这个肯定是有的;我们共有三种可以选择分别是RJ71C24、RJ71C24-R2、RJ71C24-R4。RJ71C24系列支持MC协议通信、通信协议通信、无顺序协议通信、双向协议通信全、MODBUS通信。当我帮助他们选型之后,他们在使用的时候,又是一头雾水。那么今天我抽一些时间讲解一RJ71...

weixin_39878549的博客 9266

MySQL系列四(Online DDL、Online DDL的Alter、批量删除导致IO出现瓶颈)

线上临时表积压数据过多,虽然有索引和数据归档,但是每日新增数据量>删除&归档数量,导致整体数据操作效率变慢。所以提交数据库删除工单,结果导致线上数据库半个小时内整个数据库集群链接不可用。

xingze的博客 1421

Python连接StarRocks全流程实践: SQL文件调用与Pandas混合优化

通过这种分阶段混合计算, 既能发挥StarRocks处理海量数据的性能优势, 又能保留Pandas在内存计算中的灵活性, 实现效率与功能的完美平衡.结合SQL的高效聚合与Pandas的灵活计算, 实现查询和数据处理的深度融合.该库基于SQLAlchemy 2.x开发, 仅支持Python 3.x环境.对大批量数据的写入, 建议进行分块. 分块写入较单条插入速度会有显著提升.这样可以避免python代码的查询与SQL耦合, 支持版本化管理.将DDL, DML分离为独立文件, 例如。: 调整连接复用参数。

t.y.Tang的博客 2780

【MySQL】Online DDL详解

我这一个表有1T的数据,这时我想给这个表加一个列,如果才能最大程度不影响业务呢?

http://DBAtao.cn/ 2万+

【QT+PCL】串口读取单线激光雷达数据并在QVtkWidget组件中实时刷新(一)

(本文主要记录开发过程以及遇到的困难及解决方式)

2301_76329543的博客 3067

避坑指南:C#用S7NetPlus读写西门子PLC字符串(String/WString)的完整方案

本文详细解析了C#通过S7NetPlus读写西门子PLC字符串(String/WString)的完整方案,包括内存布局、编码差异和字节序处理等关键技术细节。提供了实战优化的代码示例和常见问题排查指南,帮助开发者避免乱码、截断等常见陷阱,提升工业自动化项目的开发效率。

weixin_32956805的博客 320

你知道Online DDL吗?

在线DDL(Online Data Definition Language)是指在数据库运行状态下执行数据定义语言(DDL)操作,例如创建、修改或删除表结构、索引等操作,而不会造成数据库的长时间锁定或无法使用。传统的DDL操作通常需要对受影响的表进行排他锁定,这可能导致其他会话无法对该表进行读写操作,从而影响了数据库的正常使用。COPY—— 5.6之前默认适应这种方法,全程无法并行DMLINPLACE—— MySQL 5.6出现的,在开始和提交的短租时间里,不能并行DMLINSTANT。

Eucalyptus's blog 3740

干掉百度Apollo的安装!(Apollo10.0的源码安装)

1、在Apollo10.0的安装手册中,没有再详细给出源码安装的步骤,官方更推荐的是包管理安装,但实际上Apollo10.0仍然是可以进行源码安装的。2、使用源码安装Apollo10.0,比Apollo9.0的源码安装问题要少,整个安装过程更顺畅。3、从Apollo 10.0开始,源码安装和包管理安装采用同一套编译工具,也就是aem。之前只有在进行包管理安装的时候我们才需要安装aem,现在进行源码安装也需要安装aem。

qq_40033030的博客 892

mysql online ddl遇到的问题记录

背景 同事在线上执行两条DDL语句的时候,时间相差很大,第一个的DDL甚至执行了5分钟,引起了一些业务报警。而第二个执行了30秒,没有任何报警。 于是我们开始讨论了DDL的时候是否会锁表,block住DML。 分析 经过一番搜索,得到了一下结论。 MySQL从5.6版本开始执行了online ddl, 然后在大部分修改column情况下是支持并发的。 核心是支持了ALTER时候指定算法,支持INP...

sutonline的博客 513

CarSim仿真高级进阶---VS 命令行

仿真软件作为一种强大的工具,被广泛应用于汽车工程领域,本文将介绍如何使用VS命令行进行CarSim仿真的高级进阶操作,我们将结合相关的源代码和描述,帮助读者更好地理解和应用这一功能。打开Visual Studio,在“文件”菜单下选择“新建”->“项目”,然后选择“控制台应用程序”模板,填写项目名称和位置,点击“确定”按钮创建项目。保存源代码后,点击菜单中的“生成”->“生成解决方案”来构建项目,确保构建成功,没有任何错误。点击“编辑”按钮,在弹出的窗口中点击“新建”按钮。,并拥有有效的许可证。

weixin_50547796的博客 308

STM32cubeMX配置FreeRTOS软件定时器

文章目录前言1.软件定时器概述一.软件定时器特性二、使用cubeMX生成软件定时器总结 前言 本文主要带大家了解什么是软件定时器,并且带大家使用cubeMX配置软件定时器。 1.软件定时器概述 一.软件定时器特性 软件定时器就是一个闹钟当时间到了就执行相对应的任务或者代码。软件定时器是基于系统滴答中断的。在FreeRTOS中我们可以设置无数个软件定时器。 指定时间:启动定时器和运行回调函数,两者的间隔被称为定时器的周期 (period)。 指定类型定时器有两种类型: 1.一次性 这类定时器启动后,它的回调函

m0_49476241的博客 6949

mysql ddl_MySQL Online DDL,还是要谨慎

原标题:MySQL Online DDL,还是要谨慎 导读MySQL的Online DDL长期饱受诟病,8.0之后有没有好一些呢...本文重点讨论常见的几种Online DDL需求:增加新列(ADD COLUMN)修改列定义(MODIFY COLUMN)增加/删除索引(ADD/DROP INDEX)其他的DDL操作相对比较少,所以本文就不讨论了。此外,本文也不讨论非InnoDB引擎以及非普通索引...

weixin_39633891的博客 155

计算机组成原理(第三版)唐朔飞-第四章存储器-课后习题

计算机组成原理(第三版)唐朔飞-第四章存储器-课后习题

weixin_45735391的博客 17万+

mysql dml force index_MySQL Online DDL,还是要谨慎

 导读MySQL的Online DDL长期饱受诟病,8.0之后有没有好一些呢...本文重点讨论常见的几种Online DDL需求:增加新列(ADD COLUMN)修改列定义(MODIFY COLUMN)增加/删除索引(ADD/DROP INDEX)其他的DDL操作相对比较少,所以本文就不讨论了。此外,本文也不讨论非InnoDB引擎以及非普通索引(如全文索引、空间索引)的场景。我们先看下ALTER...

weixin_30068377的博客 86

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

重建索引要多久_转载|MySQL Online DDL,还是要谨慎

导读MySQL的Online DDL长期饱受诟病,8.0之后有没有好一些呢...本文重点讨论常见的几种Online DDL需求:增加新列(ADD COLUMN)修改列定义(MODIFY COLUMN)增加/删除索引(ADD/DROP INDEX)其他的DDL操作相对比较少,所以本文就不讨论了。此外,本文也不讨论非InnoDB引擎以及非普通索引(如全文索引、空间索引)的场景。我们先看下A...

weixin_39932455的博客 976

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

mysql ddl注意_数据库在使用MySQL Online DDL要注意谨慎_数据库_数据分析_数据管理_课课家...

导读MySQL的Online DDL长期饱受诟病,8.0之后有没有好一些呢...本文重点讨论常见的几种Online DDL需求:增加新列(ADD COLUMN)修改列定义(MODIFY COLUMN)增加/删除索引(ADD/DROP INDEX)其他的DDL操作相对比较少,所以本文就不讨论了。此外,本文也不讨论非InnoDB引擎以及非普通索引(如全文索引、空间索引)的场景。我们先看下ALTER T...

weixin_28953877的博客 492

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

浅谈MySQL Online DDL

Online DDL是什么 在MySQL5.5以及之前的版本,通常更改数据表结构操作(DDL)会阻塞对表数据的增删改操作(DML) MySQL5.6提供Online DDL之后可支持DDL与DML操作同时执行,也就是降低了DDL期间对业务延迟带来的影响

持之以恒 1162

MySQL InnoDB大表DDL时出现唯一键冲突

在Online DDL过程中,会记录并发执行的DML操作到row log中,并在DDL操作的最后阶段应用这些DML操作。当对大表执行DDL操作时,如果在操作过程中有其他会话对同一表执行了导致唯一键冲突的DML操作(如插入重复值),则DDL操作可能会失败,并报出唯一键冲突的错误。:由Percona公司开发,支持多种DDL操作,通过创建一个空表,逐步将原表的数据迁移到新表,并在最后进行快速切换,减少对业务的影响。:长时间的锁表操作会影响业务的正常运行,尤其是对于高并发的系统。在执行DDL操作前,通过设置。

qq_24520119的博客 648

mysql5.7从锁表吗_5分钟了解MySQL5.7的Online DDL雷区

Part1:写在最前Online DDL,当新手听到这个名字的时候,非常高兴,以为无论什么情况下,修改表结构都不会锁表,理想很丰满,现实很骨感!读完本文,教你如何避开这些雷区,安全的修改表结构。话不多说,我们分别来看下MySQL5.6和MySQL5.7在修改表结构上的相同和异同。Part2:5.6.25的表现①首先我们构造数据并进行测试mysql>createdatabasehelei...

weixin_33865942的博客 270

MySQL(一)数据库风险操作场景总结

本文总结了MySQL数据库常见的风险操作场景,主要包括:1) 索引失效的6种情况,如模糊匹配、使用函数、表达式计算等;2) 唯一索引的限制,包括NULL值处理、逻辑删除冲突和历史数据添加问题;3) 死锁问题及其分析方法;4) DDL操作风险及在线DDL、第三方工具和主从切换等解决方案。文章详细分析了每种场景的成因和规避方法,帮助开发者避免数据库操作中的潜在风险。

这里是阿安的博客 1162

DDL期间TDSQL异常会话查询造成数据库主备切换

摘要:在7*24联机交易系统中,对3千万行大表执行DDL操作时,因查询performance_schema.data_locks视图导致trx_sys->mutex信号量被长期占用,阻塞了包括心跳检测在内的所有DML语句,引发主备切换和交易延迟。根本原因是分布式实例的DDL行锁扫描与异常会话查询存在互斥冲突。建议解决方案包括:避开业务高峰执行DDL、使用pt工具进行在线DDL操作,以及执行DDL时慎用异常会话查询功能。(150字)

qianxunsiyue的博客 545

mysql为什么表大了要重建_MySQL 笔记整理(13) --为什么数据表删掉一半,表文件大小不变?...

笔记记录自林晓斌(丁奇)老师的《MySQL实战45讲》(本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除)13) --为什么数据表删掉一半,表文件大小不变?我们还是以MySQL中应用最广泛的InnoDB引擎为基础来展开讨论。一个表中包含两部分:表结构定义和数据。在MySQL8.0版本以前,表结构是以.frm为后缀的文件存储的。而在MySQL8.0版本,已经允许把表结构定义放在系统数据表中了。...

weixin_42240669的博客 220

如何新增数据库表字段?直接 ALTER ?卷铺盖走人吧!

摘要:千万级大表新增字段需谨慎处理,直接执行ALTER TABLE会引发锁表风暴、性能雪崩、主从延迟等问题。应对策略需分数据量级:小表可直接ALTER但需选低峰期;百万级表应使用pt-online-schema-change或gh-ost工具;千万级表需采用架构级方案,通过应用层双写、异步迁移、灰度切换等步骤实现业务无感知变更。这体现了数据库设计初期考虑扩展性的重要性,合理使用分表或预留字段可避免此类难题。

专注分享原创技术干货。大厂资深架构师,多年技术架构与技术管理经验,多年面试官经验。一对一技术指导培训,带你从小白到入门到架构设计到技术管理。关注我,免费领取学习资料。一对一免费面试指导,快速拿offer。 672

mysql开发遇到问题_MySQL常见问题 for 开发

MySQL常见语法类问题1、为啥俺的update执行后没有生效呢?场景如下:mysql> select col1,col2 from test;+------+------+| col1 | col2 |+------+------+| 0 | hot |+------+------+开发童鞋想将col1列的值改为:1 , col2列的值改为:haha ,他的update语句如下...

weixin_36026999的博客 580

MySQL Online DDL原理解读

MySQL原生Online DDL是MySQL数据库提供的一项功能,它允许在不中断数据库服务的情况下执行数据定义语言(DDL)操作。

码到三十五 1万+

Mysql online DDL特性(一)

基础材料: centos7.5 mysql 5.7.24 online DDL是在mysql5.6版本后加入的特性,用于支持DDL执行期间DML语句的并行操作,提高数据库的吞吐量。 online DDL结构简图如下: 由上图可知online DDL大体可以分为3部分: 1、copy(ALGORITHM=COPY)这部分是offline的,在DDL执行期间其他DML不能并行,也...

一梦如是的博客 1万+
上一篇: 有趣的SQL二:两个表没连接条件的JOIN
下一篇: 如何最快恢复逻辑备份
老叶茶馆_
博客等级 码龄9年 1152粉丝 411原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值