全局锁表级锁和行锁MySQL三种锁的原理和用途.docx
《全局锁表级锁和行锁MySQL三种锁的原理和用途.docx》由会员分享,可在线阅读,更多相关《全局锁表级锁和行锁MySQL三种锁的原理和用途.docx(10页珍藏版)》请在第一文库网上搜索。
1、全局锁、表级锁和行锁MySQ1三种锁的原理和用途前言锁是服务器在协调多个进程/线程并发访问某一资源的访问机制。数据是一种用户共享的资源,保证数据并发访问的一致性、有效性是关系型数据库的本质问题,锁冲突同时也是也是影响数据库并发访问性能重要度量指标。要想学好关系型数据库,锁机制是DBA一个绕不开的话题。今天就讲一讲MySQ1的三种锁。根据加锁的范围,MySQ1里面的锁大致可以分成全局锁,表级锁,行锁;本文主要讲述MySQ1的这三种锁的原理和用途。一、全局锁MySQ1提供了一种加全局读锁的方法,命令是FIUShtab1eswithread1ock(FTWR1)o全局锁就是对整个数据库进行加锁。当你
2、需要让整个库处于只读状态的时候,可以使用这个命令,之后的其他线程的以下语句会被阻塞:数据DM1的更新操作(数据的增删改)、数据DD1的定义语句(包括建表、修改表结构等)和事务更新类的提交语句。1.1全局锁的应用场景全局锁的一个非常典型场景为:1、使用mysq1dump做全库逻辑备份;2、主库在做完全库逻辑备后在从库上做主从配置。使用mysq1dump做初始化工作。以前的常规做法是使用F1ushtab1eswithread1ock(FTWR1)锁全库,然后对整个库进行逻辑备份,命令如下:这种场景下会带来一定的局限性:1如在主库mysq1dump操作,备份期间数据库不能执行增删改,影响业务正常使用
3、,在备份时间长的情况下,此操作业务不可容忍;2.如在从库mysq1dump操作,那么备份期间从库不能执行主库同步过来的bin1og进行同步更新,导致主从延迟。可以在从库上执行如下命令,参考Seconds_Behind_Master,多刷几遍命令可以看到参数一直在增大。!注意:上述场景为不加一SingIeTranSaCtiOn参数的逻辑备。如果想不影响业务正常使用,则可使用如下命令:-sing1e-transaction的参数意义,可以使用命令进行查看那么,加全局锁如此不好,备份为什么要加锁呢?这是因为数据一致性的问题,如不加全局锁的话,备份发起时库的数据一致性和恢复后的数据库一致性不在一个逻辑
4、时间点,会导致备份数据库和恢复数据库的数据逻辑不一致的。为什么需要全局读锁(FTwR1)官方自带的逻辑备份工具是mysq1dumpo当mysq1dump使用参数一sing1etransaction的时候,导数据之前就会启动一个事务,来确保拿到一致性快照视图。由于MVCC的支持,备份库期间数据是可以正常更新的。MVCC是个嘛?MVCC(Mu1ti-VersionConcurrencyContro1|多版本并发控制)InnoDB通过为每一行记录添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行数据何时被创建,另外一个记录这行数据何时过期(或者被删除)。但是InnoDB并不存储这些事件发生时
5、的实际时间,相反它只存储这些事件发生时的系统版本号(1SN)o这是一个随着事务的创建而不断增长的数字。每个事务在事务开始时会记录它自己的系统版本号。每个查询必须去检查每行数据的版本号与事务的版本号是否相同。MVCC对普通的SE1ECT不加锁,直接利用MVCC读取指版本的值,避免了对数据重复加锁的过程。UndoIog是InnodbMVCC重要组成部分,InnODB的MVCC就是基于UndOIog实现的。InnODB支持MVeC多版本,其中RC和RR隔离级别是利用COnSiStentreadVieW方式支持的,即在某个时刻对事物系统打快照记下所有活跃读写事务ID,之后读操作根据事务ID与快照中的事
6、务ID进行比较,判断可见性。综上,MVCC的实现,通过保存数据在某个时间点的快照来实现的。意味着一个事务无论运行多长时间,在同一个事务里能够看到数据一致的视图。根据事务开始的时间不同,同时也意味着在同一个时刻不同事务看到的相同表里的数据可能是不同的。为什么还需要FTWR1?sing1e-transaction方法只适用于使用InnOdb引擎的库。如果有的表使用了不支持事务的引擎,那么备份就只能通过FTWR1方法。比如,对于MyISAM这种不支持事务的引擎,如果备份过程中有更新,总是只能取到最新的数据,那么就破坏了备份的一致性。所以,就需要使用FTWR1命令保持非I1modb的一致性读。这也是D
7、BA要求业务开发人员使用InnoDB替代MyISAM的原因之一。二、表级锁MySQ1表级锁有两种:一是表锁,一是元数据锁2.1表锁表锁的语法是1ocktab1esread/write,示例如下:表锁与FTWR1类似,可用un1ocktab1es主动释放锁,客户端断开时也会自动释放。注意:IoCktab1es语法除了会限制别的线程的读写外,也限定了本线程接下来的操作对象。在还没有出现更细粒度的锁的时候,表锁是最常用的处理并发的方式。而对于InnoDB这种支持行锁的引擎,一般不使用1ocktab1es命令来控制并发,毕竟锁住整个表的影响面还是太大了。2.2MD1锁另一类表级锁是MD1(metada
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全局 锁表级锁 MySQL 三种锁 原理 用途
