全局锁、表级锁和行锁-MySQL三种锁的原理和用途.docx
《全局锁、表级锁和行锁-MySQL三种锁的原理和用途.docx》由会员分享,可在线阅读,更多相关《全局锁、表级锁和行锁-MySQL三种锁的原理和用途.docx(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、全局锁、表级锁和行锁MySQL三种锁的原理和用途前言锁是服务器在协调多个进程/线程并发访问某一资源的访问机制。数据是一种用户共享的资源,保证数据并发访问的一致性、有效性是关系型数 据库的本质问题,锁冲突同时也是也是影响数据库并发访问性能重要度量指 标。要想学好关系型数据库,锁机制是DBA一个绕不开的话题。今天就讲一讲MySQL的三种锁。根据加锁的范围,MySQL里面的锁大致可以分 成全局锁,表级锁,行锁;本文主要讲述MySQL的这三种锁的原理和用途。一、全局锁MySQL提供了一种加全局读锁的方法,命令是Flush tables with read lock (FTWRL) o全局锁就是对整个数
2、据库进行加锁。当你需要让整个库处于只读状态 的时候,可以使用这个命令,之后的其他线程的以下语句会被阻塞:数据DML3 .当表有多个索引的时候,不同的事务可以使用不同的索引锁定不同的行,另 外,不论是使用主键索引、唯一索引或普通索引,InnoDB都会使用行锁来对数 据加锁。4 .表创建了索引字段,但是否使用索引来检索数据由MySQL通过判断不同执行 计划的代价来决定的,了解Oracle CB0机制读者可能更容易理解;如果MySQL 认为全表扫描效率更高,比如对一些很小的表,它就不会使用索引,这种情况 下InnoDB将使用表锁,而非行锁。结语本文简单介绍了 MySQL的全局锁,表级锁,行锁三种锁;
3、有些地方需要后续 试验做验证;如有不清楚的地方,欢迎大家探讨;1. InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle 不同,后者是通过在数据块中对相应数据行加锁来实现。InnoDB这种行锁实现 特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则, InnoDB将使用表锁。2. MySQL除了共享锁-排他锁,还有意向共享锁(IS)和意向排他锁(IX);意 向锁是InnoDB自动加的,不需用户干预。对于UPDATE、DELETE和INSERT语 句,InnoDB会自动给涉及数据集加排他锁(X);对于普通SELECT语句,InnoDB不会加任何锁。
4、参考: https:/dev. mysql. com/doc/refman/5. 6/en/innodb-locking. html#innodb-shared-exclusive-lockshttps:/www. cnblogs. com/keme/p/11065025. htmlhttps:/www. jianshu. com/p/7d050498d9dahttps:/blog. csdn. net/laladebon/article/details/82347596-全文完-的更新操作(数据的增删改)、数据DDL的定义语句(包括建表、修改表结构 等)和事务更新类的提交语句。1.1 全局锁
5、的应用场景全局锁的一个非常典型场景为:1、使用mysqldump做全库逻辑备份;2、主库在做完全库逻辑备后在从库上做主从配置。使用mysqldump做初始化 工作。以前的常规做法是使用Flush tables with read lock (FTWRL )锁全库,然 后对整个库进行逻辑备份,命令如下:这种场景下会带来一定的局限性:1 .如在主库mysqldump操作,备份期间数据库不能执行增删改,影响业务正常 使用,在备份时间长的情况下,此操作业务不可容忍;.如在从库mysqldump操作,那么备份期间从库不能执行主库同步过来的 binlog进行同步更新,导致主从延迟。可以在从库上执行如下命令
6、,参考 Seconds_Bchind_Master,多刷几遍命令可以看到参数一直在增大。I;注意:上述场景为不加一singleTransacl ion参数的逻辑备。如果想不影响业 务正常使用,则可使用如下命令:一single-transaction的参数意义,可以使用命令进行查看那么,加全局锁如此不好,备份为什么要加锁呢?这是因为数据一致性的问题,如不加全局锁的话,备份发起时库的数据一致性 和恢复后的数据库一致性不在一个逻辑时间点,会导致备份数据库和恢复数据 库的数据逻辑不一致的。为什么需要全局读锁(FTWRL)官方自带的逻辑备份工具是mysqldumpo当mysqldump使用参数一sing
7、letransaction 的时候, 导数据之前就会启动一个事务,来确保拿到一致性快照 视图。由于MVCC的支持,备份库期间数据是可以正常更新的。MVCC是个嘛?MVCC (Muiti-Version Concurrency Control | 多版本并发控制)TnnoDB 通 过为每一行记录添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行 数据何时被创建,另外一个记录这行数据何时过期(或者被删除)。但是 InnoDB并不存储这些事件发生时的实际时间,相反它只存储这些事件发生时的 系统版本号(LSN) o这是一个随着事务的创建而不断增长的数字。每个事务在 事务开始时会记录它自己的系统
8、版本号。每个查询必须去检查每行数据的版本 号与事务的版本号是否相同。MVCC对普通的SELECT不加锁,直接利用MVCC读取指版本的值,避免了对数据 重复加锁的过程。Undo log是Innodb MVCC重要组成部分,InnoDB的MVCC就 是基于Undo log实现的。InnoDB支持MVCC多版本,其中RC和RR隔离级别是 利用consistent read view方式支持的,即在某个时刻对事物系统打快照记下 所有活跃读写事务ID,之后读操作根据事务ID与快照中的事务ID进行比较, 判断可见性。综上,MVCC的实现,通过保存数据在某个时间点的快照来实现的。意味着一个 事务无论运行多长
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全局 表级锁 MySQL 三种锁 原理 用途
限制150内