暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片
MySQL锁知识总结.pdf
296
20页
13次
2023-05-23
5墨值下载
MySQL 锁知识点总结
一、基本概
数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。
而锁就是用来实现这些访问规则的重要数据结构。
根据加锁的范围,MySQL 的锁大致分为全局锁、表级锁和行锁三类。
二、加锁方式及原
2.1 全局锁
全局锁就是对整个数据库实例加锁。当开启全局锁,整个库就处于只读状态,之后其他线程的以下语句会被阻塞:数据更新语
DML(数据的增删改)、数据定义语句 DDL(包括建表、修改表结构等)和更新类事务的提交语句。
使用场景:全库逻辑备份
使用命令: Flush tables with read lock (简称 FTWRL),新版本已经使用 --single-transaction 替代了 FTWRL。
【FTWRL 对主从的影响】
1、主库执行 FTWRL 后,主库就不能执行更新,业务基本上就得停摆;
2、从库上执行 FTWRL 后,从库不能执行主库同步过来的 binlog,会导致主从延迟。
2.2 表级锁
MySQL 里面表级别的锁有两种:一种是表锁,一种是元数据锁(meta data lock,MDL)。
<1> 表锁
表锁的语法是 lock tables … read/write。与 FTWRL 类似,可以用 unlock tables 主动释放锁,也可以在客户端断开的时候
自动释放。需要注意,lock tables 语法除了会限制别的线程的读写外,也限定了本线程接下来的操作对象。
【加锁方式】
如果在某个线程 A 中执行 lock tables t read, t1 write;
则其他线程写 t、读写 t1 的语句都会被阻塞。
同时,线程 A 在执行 unlock tables 之前,也只能执行读 t、读写 t1 的操作。连写 t 都不允许,自然也不能访问其他表。
<2> MDL
另一类表级的锁是 MDL(metadata lock)。MDL 不需要显式使用,在访问一个表的时候会被自动加上。MDL 的作用是,保证读写
的正确性。假如一个查询正在遍历一个表中的数据,而执行期间另一个线程对这个表结构做变更,删了一列,那么查询线程拿到的结
果跟表结构对不上,所以必须要加 MDL 锁来保证读写的正确性。
【加锁方式】
对一个表做增删改查时,加 MDL 读锁;对表做结构变更操作时,加 MDL 写锁。
读锁之间不互斥,可以多个线程同时对数据进行增删改查;
读锁与写锁,写锁与写锁之间是互斥的,也就是说当数据结构变更时,是无法执行增删改查或者其他数据结构变更的。
2.3 行级锁
MySQL 的行锁是在引擎层实现的,只有支持事务的引擎才有行锁,最常见的就是 InnoDB 引擎。比如 MyISAM 引擎不支持事务,
以就没有行锁,所以它要实现并发控制的时候只能使用表锁。
of 20
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文档被以下合辑收录

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜