当前位置:首页 > 技术分析 > 正文内容

如何确保mysql的alter语句不锁表

ruisui881个月前 (04-01)技术分析17

mysql增加字段、修改字段、增加索引、调整索引的情况比较复杂,有可能锁表,从而导致其他进程不可访问。如何确保alter语句不会引发锁表呢?

mysql已经提供相关的验证功能,就是在alter语句的末尾增加

ALGORITHM=INPLACE, LOCK=NONE;

当alter语句无法做到不锁表,alter脚本就会执行失败,从而确保alter脚本不会导致锁表。

ALTER TABLE tbl_name ADD index idx_column (column), ALGORITHM=INPLACE, LOCK=NONE;

ALGORITHM=INPLACE

更优秀的解决方案,在当前表加索引,步骤:

1.创建索引(二级索引)数据字典

2.加共享表锁,禁止DML,允许查询

3.读取聚簇索引,构造新的索引项,排序并插

入新索引

4.等待打开当前表的所有只读事务提交

5.创建索引结束

ALGORITHM=COPY

通过临时表创建索引,需要多一倍存储,还有更多的IO,步骤:

1.新建带索引(主键索引)的临时表

2.锁原表,禁止DML,允许查询

3.将原表数据拷贝到临时表

4.禁止读写,进行rename,升级字典锁

5.完成创建索引操作

LOCK=DEFAULT:默认方式,MySQL自行判断使用哪种LOCK模式,尽量不锁表

LOCK=NONE:无锁:允许Online DDL期间进行并发读写操作。如果Online DDL操

作不支持对表的继续写入,则DDL操作失败,对表修改无效

LOCK=SHARED:共享锁:Online DDL操作期间堵塞写入,不影响读取

LOCK=EXCLUSIVE:排它锁:Online DDL操作期间不允许对锁表进行任何操作

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3233.html

标签: 查看表索引
分享给朋友:

“如何确保mysql的alter语句不锁表” 的相关文章

Linux 最主要的发行分支

Linux 有数百个发行分支。主要的有以下四个。slackwareSlackware 是由 Patrick Volkerding 在 1992 年推出的,它是全球现存最古老的 Linux 发行版。Slackware 被设计为高度可定制和强大的,并且要求用户了解 每个元素,它的包系统是不支持依赖的。...

如何在GitLab上回退指定版本的代码?GitLab回退指定版本问题分析

在Git中,回退到指定版本并不是删除或撤销之前的提交,而是创建一个新的提交,该提交包含指定版本的内容。这意味着您需要将当前代码更改与指定版本之间的差异进行比较,并将其合并到一个新的提交中。如果您没有更新本地代码,并且您希望将 GitLab 仓库回退到指定版本,您可以使用以下命令:git fetchg...

用IDEA开发如何用Git快速拉取指定分支代码?

1,准备空的文件夹,git init2,关联远程仓库,git remote add origin gitlab地址3,拉取远程分支代码,git pull origin 远程分支名再用IDEA打开项目即可...

美国民众负债累累 但今年假期消费者支出仍将创下新高

智通财经APP获悉,在迎接假期之际,许多美国人已经背负了创纪录的信用卡债务。然而,今年假期消费者支出仍将创下新高。根据美国零售联合会(NRF)上周发布的报告,预计今年11月1日至12月31日期间的消费总额将达到创纪录的9795亿至9890亿美元之间。NRF首席经济学家Jack Kleinhenz表示...

2024最新版:前端性能优化方案汇总

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~Hello,大家好,我是 Sunday。前端性能优化一直是很多同学非常关注的问题,在日常的面试中也是经常会被问到的点。所以今天咱们就花一点时间来了解一下2024最新的...

数组、去重、排序、合并、过滤、删除

ES6数字去重 Array.from(new Set([1,2,3,3,4,4])) //[1,2,3,4] [...new Set([1,2,3,3,4,4])] //[1,2,3,4]2、ES6数字排序 [1,2,3,4].sort(); // [1, 2,3,4],默认是升序...