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

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

ruisui884周前 (04-01)技术分析14

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语句不锁表” 的相关文章

Slackware 15.0?发布:历史最久且在维护的Linux发行版本

Slackware 14.0 于 2012 年发布,在经过了数年的等待之后 Slackware 15.0 发行版本于今天正式发布。Slackware 于 1993 年发布,是目前历史最悠久、且仍在维护的 Linux 发行版本。Slackware 15.0 在去年进入测试阶段,在发布几个候选版本之后终...

快速掌握 Git:程序员必会的版本控制技巧

在现代软件开发中,版本控制系统(VCS)是开发人员不可或缺的工具。无论是个人项目,还是多人协作的团队开发,良好的版本控制都能确保代码管理的高效性与稳定性。而在版本控制系统中,Git 凭借其分布式、灵活性和高效性,成为了最流行的工具之一。几乎所有的开发团队都在使用 Git 来管理代码版本、协作开发和追...

你感动了吗?佳能超规格镜头 RF 24-105mm F2.8深度测评

如果要你选一支用作多题材创作的挂机镜头,那我相信很多人会选择24-105mm这个焦段的镜头。作为一支可以实现从广角到长焦的变焦镜头,24-105mm有着丰富的焦段选择。只是基于镜头体积以及光学结构上的限制,此前的24-105mm镜头只能恒定在F4的光圈。而佳能打破了这一限制,将实用焦段和恒定光圈完美...

js中数组filter方法的使用和实现

定义filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。语法var newArray = arr.filter(callback(element[, index[, selfArr]])[, thisArg])参数callback循环数组每个元素时调用的回调函数。回调函...

VUE-router

七.Vue-router1、什么是vue-routervue-router是vue.js官方路由管理器。vue的单页应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统页面切换是用超链接a标签进行切换。但vue里是用路由,因为我们用Vue做的都是单页应用,就相当于只有一个主的i...

三、Uni-app + vue3 页面如何跳转及传参?

Vue 项目往往需要使用 vue-router 插件,刚开始入门 Uni-app + Vue3 项目的同学,会不会想着路由使用 vue-router V4 版本不就可以了吗?不怕大家笑话,我就是这样想的,毕竟我是第一次使用 Uni-app ,由于孕期记性贼差,所以我决定写成笔记,加深记忆。uni-a...