当前位置:网站首页>MySQL 45讲 | 06 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
MySQL 45讲 | 06 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
2022-07-25 14:29:00 【蓝布棉】
06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
- 数据库锁设计的初衷是处理并发问题。
- 根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。
全局锁
全局锁就是对整个数据库实例加锁。
加全局读锁的方法,命令是
Flush tables with read lock (FTWRL)。全局锁让整个库出入只读状态, 其他线程的:数据更新语句(数据的增删改)、数据定义语句(包括 建表、修改表结构等)和更新类事务的提交语句会被阻塞。
全局锁的典型使用场景是,做全库逻辑备份。也就是把整库每个表都select出来存成文本。
不加锁的话,备份系统备份的得到的库不是一个逻辑时间点,这个视图是逻辑不一致的。
官方自带的逻辑备份工具是
mysqldump。
当mysqldump使用参数
–single-transaction的时候,导数据之前就会启动一个事务,来确保拿到一致性视图。而由于MVCC的支持,这个过程中数据是 可以正常更新的。 ( single-transaction方法只适用于所有的表使用事务引擎的库)
问题: 既然要全库只读,为什么不使用set global readonly=true的方式呢?
确实 readonly方式也可以让全库进入只读状态,但我还是会建议你用FTWRL方式 。
(1)在有些系统中,readonly的值会被用来做其他逻辑,比如用来判断一个库是主库还是备 库。因此,修改global变量的方式影响面更大,不建议使用。
(2)在异常处理机制上有差异。如果执行FTWRL命令之后由于客户端发生异常断开,那么 MySQL会自动释放这个全局锁,整个库回到可以正常更新的状态。而将整个库设置为 readonly之后,如果客户端发生异常,则数据库就会一直保持readonly状态,这样会导致整个 库长时间处于不可写状态,风险较高。
表级锁
MySQL里面表级别的锁有两种:一种是表锁,一种是元数据锁(meta data lock,MDL)。
表锁的语法是
lock tables …read/write。与FTWRL类似,可以用unlock tables主动释放锁, 也可以在客户端断开的时候自动释放。lock tables语法除了会限制别的线程的读写外,也限定了本线程接下来的操作对象。对于InnoDB这种支持行锁的引擎,一般不使用lock tables命令来控制并发,毕竟锁住整个表的影响面还是太大 。
元数据锁 MDL不需要显式使用,在访问一个表的时候会被自动加上。
(1)读锁之间不互斥,因此你可以有多个线程同时对一张表增删改查。
(2)读写锁之间、写锁之间是互斥的,用来保证变更表结构操作的安全性。
- 事务中的元数据锁 (MDL锁),在语句执行开始时申请,但是语句结束后并不会马上释 放,而会等到整个事务提交后再释放。
问题 :如何安全地给小表加字段?
(1) 首先要解决长事务,事务不提交,就会一直占着MDL锁。 如果你要做DDL变更的表刚好有长事务 在执行,要考虑先暂停DDL,或者kill掉这个长事务 。
(2) 如果你要变更的表是一个热点表, 请求很频繁,这时候kill可能未必管用, 比较理想的机制是,在alter table语句里面 设定等待时间,如果在这个指定的等待时间里面能够拿到MDL写锁最好,拿不到也不要阻塞后面的业务语句,先放弃。之后开发人员或者DBA再通过重试命令重复这个过程。
小结
介绍了MySQL的全局锁和表级锁。
全局锁主要用在逻辑备份过程中。
表锁一般是在数据库引擎不支持行锁的时候才会被用到的。
元数据锁(MDL)会直到事务提交才释放。
边栏推荐
- The security market has entered a trillion era, and the security B2B online mall platform has been accurately connected to deepen the enterprise development path
- jqgrid全选取消单行点击取消事件
- idea正则表达式替换(idea正则搜索)
- Paddlenlp之UIE关系抽取模型【高管关系抽取为例】
- Gameframework making games (II) making UI interface
- 机械制造业数字化新“引擎”供应链协同管理系统助力企业精细化管理迈上新台阶
- PHP website design ideas
- bond0脚本
- Okaleido ecological core equity Oka, all in fusion mining mode
- Filters get the data in data; Filters use data in data
猜你喜欢

关于ROS2安装connext RMW的进度条卡在13%问题的解决办法

如何设计一个高并发系统?

The security market has entered a trillion era, and the security B2B online mall platform has been accurately connected to deepen the enterprise development path

Resource not found: rgbd_launch 解决方案

基于redis的keys、scan删除ttl为-1的key

Okaleido ecological core equity Oka, all in fusion mining mode

D2. picking carrots (hard version) (one question per day)
Famous handwritten note taking software recruit CTO · coordinate Shenzhen

Realize a family security and environmental monitoring system (II)

Realize a family security and environmental monitoring system (I)
随机推荐
Paddlenlp之UIE关系抽取模型【高管关系抽取为例】
Flask SSTI injection learning
thymeleaf通过样式控制display是否显示
PHP website design ideas
Software testing -- 1. Outline of software testing knowledge
Go语言创始人从Google离职
pytorch训练代码编写技巧、DataLoader、爱因斯坦标示
IDEA设置提交SVN时忽略文件配置
软件测试 -- 1 软件测试知识大纲梳理
Why do China Construction and China Railway need this certificate? What is the reason?
CTS test introduction (how to introduce interface test in interview)
Gameframework making games (II) making UI interface
Thymeleaf controls whether display is displayed through style
CDA level Ⅰ 2021 new version simulation question 2 (with answers)
Feiwo technology IPO meeting: annual revenue of 1.13 billion Hunan Cultural Tourism and Yuanli investment are shareholders
C language and SQL Server database technology
opencv视频跟踪「建议收藏」
The input input box of H5 page pops up the numeric keypad, which needs to support decimal points
知名手写笔记软件 招 CTO·坐标深圳
Ten common application scenarios of redis