mysql修改字段的长度是否会锁表

news2024/11/17 23:59:16

结论:

缩小字段长度不能使用inpalce,会锁表。
放大字段长度:取决于变化前和变化后是否跨越255这个长度。以UTF8编码为例,一个字符占3个字节。
字段变化1:varchar(50)--》varchar(80),不锁表。
字段变化2:varchar(100)->varcahr(130),不锁表。
字段变化3:varchar(50)--》vachar(130),会锁表;50*3=150个字节,130*3=390字节,这个变化跨越了255长度,会锁表。

缩小字段长度示例

本文实验的mysql版本是5.7
本文操作的t_customer_copy1表的数据量有1000w+。
缩小phone字段的长度由varchar(512)修改长度至varchar(256).
alter table t_customer_copy1 modify column phone varchar(256), algorithm=copy;
改小字段的长度algorithm不能选择inplace。
进行上述操作后,耗时情况:1047.06s,大概18分钟
在这里插入图片描述

在这个操作的过程中,不能对表里的数据进行修改,查询不受影响。在这里插入图片描述

扩大数据库字段长度示例

使用t_customer_copy1表,数据量有1000万。
将字段phone varchar(256)扩大到varchar(512)
alter table t_customer_copy1 modify column phone varchar(512);
耗时0.73s。
将字段 relate_id varchar(64)扩大到varchar(90),耗时1044s,17min。
大家可能印象中有256的概念,这个256并不是指定义的字符串的长度,而是这个字段存储占的字节个数.
字段的长度是以字节为单位存储,utf8一个字符需要三个字节。0~255字节以内的长度可以使用一个byte存储。
大于255个字节的长度则需要使用2个byte存储。大家可能印象中有256的概念,这个256并不是指varchar(256).

**online ddl **
algorithm={copy|inplace}
LOCK={NONE|SHARED|DEFAULT|EXCLUSIVE} 表的锁定方式
NONE:允许并发查询和DML(数据库操作语言,INSERT、UPDATE、DELETE)操作;
SHARED:允许并发查询;
DEFAULT:允许尽可能的并发查询和DML操作;
EXCLUSIVE:不允许并发查询和DML操作。
COPY方式:
这是InnoDB最早期支持的方式,主要实现步骤:

  1. 创建与原表结构定义一致的临时表;
  2. 对原表加锁,不允许执行DML,但允许查询;
  3. 在临时表上执行DDL语句;
  4. 逐行拷贝原表数据到临时表;
  5. 原表与临时表进行RENAME操作,此时会升级原表上的锁,不允许读写,直至完成DDL操作;

in-place方式:
只支持字段的字节长度变化在0~255和256到更大值这两个区间内变化。扩大字段长度跨越上述这个区间,就会使用copy。
执行alter table t_customer_copy1 modify column phone varchar(512), algorithm=inplace,LOCK=NONE;不支持inplace,执行语句会提示不支持。
缩小字段长度不支持inplace.

MDL

所有方式做 DDL 均会产生 MDL(metadata lock)。除了 copy 模式会有持续性的锁(DDL 的整个过程期间无法向该表写入任何数据)之外,其他方式的 MDL 均为短暂的锁。

除了 copy 模式之外的所有模式,MDL 如下:

在 DDL 的开始阶段,申请该表的 EXCLUSIVE-MDL 锁,禁止读写
降级 EXCLUSIVE-MDL 锁,允许读写
在 DDL 的最终 COMMIT 阶段,升级 EXCLUSIVE-MDL 锁,禁止读写
其中的阶段一和阶段三,其 MDL 的持续时间都是非常短暂的,也就是申请到了 MDL 锁之后会在很快的时间(一般小于一秒)处理完成相关操作并释放锁,一般情况下是不会影响业务的。只有阶段二是真正在处理数据,持续时间一般较长。

但是,有可能出现在阶段一和阶段三,无法申请到 MDL 的情况。这是因为 MDL 和所有的读写语句都可能会产生冲突,如果是在申请 MDL 的时候,之前有读写的事务一直没有执行完成(或者执行完成之后一直没有 COMMIT),MDL 就会无法立刻申请到,这个时候,DDL 语句,以及所有在该 DDL 语句之后的读写事务,都会阻塞并等待之前的读写事务完成,导致整个实例处于不可用状态。这个时候 SHOW PROCESSLIST 看到的语句状态为 waiting for metadata lock。

由于目前所有的 DDL 语句都会产生 MDL,无法避免,因此,在执行 DDL 操作期间,尽可能确保不要有未执行完成的长事务。如果发生了 warting for metadata lock 导致的阻塞,一般有以下三种处理方法:

耐心等待之前的事务全部执行完成
将之前未执行完成的事务全部 kill 掉
kill 掉 DDL 语句

参考博客:https://www.cnblogs.com/zmc60/p/14533123.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式:ARM多寄存器存取指令详解

文章目录多寄存器存取指令的二进制编码指令汇编格式举例注意事项多寄存器传送指令可以用一条指令将16个可见寄存器(R0~R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。如:可将寄存器列表…

李书福旗下亿咖通纳斯达克上市:作价38亿美元 路演PPT曝光

雷递网 雷建平 12月21日亿咖通科技控股(简称“ECARX”、“亿咖通科技”)今日与特殊目的公司COVA Acquisition Corp.(简称“COVA”)完成合并,并在美国纳斯达克股票市场(Nasdaq Stock Market LLC)…

[UE5]在多个固定摄像机视角间切换,切换多个摄像机,显示不同摄像机所看内容

[UE5]在多个固定摄像机视角间切换,切换多个摄像机,显示不同摄像机所看内容1.写在前面01.作者碎碎念02.结果演示截图演示视频视频教程源码链接03.实现思路实现思路04.同步的博客CSDN掘金博客园知乎2.需要准备的软件3.步骤大神步骤:详细步骤&am…

再写java探针

大家好,我是烤鸭: 以前写过一篇全链路探针实现的文章,最近同事间搞技术分享,再整理一篇。可惜这两年没有继续搞这方面的技术,算是两年前的拓展篇吧。很多技术只放了图,文字就不写了,可以参考…

笔记本加固态小白怎么设置

​最近有用户说电脑硬盘空间不够用了,于是问笔记本加固态小白怎么设置,打算将系统安装在这上面。但由于原先的系统盘有很多重要的数据,该用户就问到有没有什么办法不需要重装,关于笔记本加固态小白操作方法。 工具/原料&#xff…

Redis集群的三种方式详解(附优缺点及原理区别)

Redis提供了三种集群方式,下面我重点详解Redis三种集群方式的原理及优缺点等区别mikechen 目录 Redis主从复制模式Redis哨兵模式Redis集群模式 Redis主从复制模式 1.Redis主从复制定义 主从模式是三种模式中最简单的,主从模式指的是使用一个Redis实例…

Redis入门及Redis基本数据类型的相关命令

1.1、Redis简介 Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker,翻译为: Redis是一个开源的内存中的数据结构存储系统,它可以用作∶数据库、缓存和消息中间件。官网: https:…

2023,AIGC能赚到钱吗?

2022年,AIGC(生成式AI)是当之无愧的网红。AI作画在各大社交平台刷屏,ChatGPT火爆国内外出尽了风头,依靠AI生成语音和表情、动作的数字人也频频露脸。2022年12月,Science杂志发布了2022年度科学十大突破&…

vue-element-template模板

vue-element-template模板 vue-element-admin是一个非常全面的系统,提供了很多现成的方案,我们可以在写项目的时候过来参考,但是也有缺点:不太好进行二次开发,因为要删减的东西太多了。于是就有另外一个子系统vue-elem…

Linux 安装nginx, 搭建nginx文件服务器

在linux安装nginx web 服务器,安装后再修改配置文件,将该主机作为一个文件服务器,最终效果如下图: 安装nginx 安装依赖包 yum install -y gcc pcre-devel zlib-devel openssl openssl-devel (若安装的Redhat7&…

JVM数据结构一览及分析

JVM总体一张图: 整体上来看:类文件从类加载子系统,加载完成之后,主要存放在方法区(JRockit和H9没有方法区,这里指的是HotSpot)。运行时的数据主要是存放在运行时数据区,代码的解释编…

✿✿✿JavaScript --- 常见样式案例

目录 1.下拉框复选框单选框的事件样式 和 禁止喜欢中文字与鼠标右键 2.点击按钮后样式发生变化 3.表格追随鼠标更换颜色 4.点击更换背景 5.点击不同的选择栏,内容展示在一个板块内 6.排他思想,许多按钮,点击谁谁就有样式 7.按钮全选反…

微机原理接口

目录 接口的基本概念 什么是接口?(背会) 接口电路的功能?(背会2019年 ) 接口电路基本结构 什么是端口 (背) 接口的控制原理 数据的传送方式(知道并行串行的特点就可以) 并行传…

校园二手交易WEB

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 方达影院系统总共分两个模块,用户模块和管理员模块, 用户模块:登录和注册功能&#…

【Pytorch_Geometric】(GCN)基本使用:数据集与邻接矩阵格式,图形(点)的可视化展示

声明:仅学习使用~ 目录 过程记录1、Graph Neural Networks2、数据集描述3、edge_index3、模型定义与训练方法4、输出特征展示5、训练模型(半监督,semi-supervised)过程记录 1、Graph Neural Networks 致力于解决不规则数据结构(图像和文本相对格式都固定,但是社交网络与…

陪诊系统app开发,一个应用可切换不同身份

随着人口老龄化,年轻人工作压力大,经常加班,或在外地定居,出差等原因,没时间陪长辈。对于一些有慢性疾病的困扰,需要长期陪伴而延伸出来的一个新型行业-陪诊。陪诊职业出现就被人认可是因为人们对这个职业有…

什么是多模态深度学习?有哪些应用场景?

深度多模态学习能够更全面地理解数据,在准确性和效率上均有大幅提升。但首先,什么是多模态深度学习?它有哪些应用场景?本文将从定义、应用与前景三个角度来回答这两个问题。随着深度神经网络的发展,深度学习也逐渐向多…

基于事件触发的二阶多智能体领导跟随一致性

【无限嚣张(菜菜)】:hello您好,我是菜菜,很高兴您能来访我的博客,我是一名爱好编程学习研究的菜菜,每天分享自己的学习,想法,博客来源与自己的学习项目以及编程中遇到问题…

基于java+springboot的人事招聘信息网站-计算机毕业设计

运行环境 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven 项目介绍 在这个计算…

教你一招,解决头疼的DCOM配置问题

一、背景 OPC通信技术是工业通信领域中一套广为流行的方案,能够帮助大量的使用不同通信协议的下层现场设备数据与上位机应用程序进行交互。实现OPC通信需要基于Winodows上的COM/DCOM技术,只有在服务器和客户端都进行DCOM配置,开放相应的权限…