问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql数据库锁有哪些

发布网友 发布时间:2022-04-30 20:13

我来回答

2个回答

懂视网 时间:2022-05-01 00:35

如果是一个事务T1斤获得了行r的共享锁,那么另外一个事务T2可以立即获得行r的共享锁,因为读取并没有改变行r的数据,称这种情况为锁兼容Lock Compatible。但若有其他事务T3想获得行r的排他锁,则必须等待事务T1、T2释放行r的共享锁---这种情况称为锁不兼容

技术分享

可以看到 X锁与任何锁都不兼容,而S锁仅和S锁金融。需要特别注意,S和X都是行锁,兼容是指通一行记录row锁的兼容情况

此外,InnoDB支持多粒度granular锁定。这种锁定允许事务在航级别上的锁和表级别上的锁同时存在。为了支持在不通粒度上进行加锁操作,InnoDB存储引擎支持一种额外的锁方式,称为意向锁(Intention Lock)。意向锁是将锁定的对象分为多个层次,意向锁意味着事务希望在更细粒度(fine granularity)上进行枷锁。

技术分享

若将上锁的对象看成一棵树,那么对最上层的对象上锁,也就是对最细粒度的对象进行上锁,那么首先需要对粗粒度的对象上锁,如上图,如果需要对页上的记录r进行上X锁,那么分别需要对数据A、表、页上意向锁IX,最后对记录r上X锁,若其中任何一部分导致等待,那么该操作需要等待粗粒度锁的完成,举例来说,在对记录r及杀死那个X锁之前,已经有事务对表1进行了S表锁,那么表1已存在S锁,之后事务需要对记录r在表上系上IX,由于不兼容,那么该事物需要等待表锁操作的完成

InnoDB存储引擎支持意向锁设计比较简练,其意向锁即为表级别锁。设计目的主要是为了在一个事务上揭示下一个行将别请求的锁类型。其支持两种意向锁

意向共享锁 IS LOCK 事务想要获得一张表中某几行的共享锁

意向排他锁 IX LOCK 事务想要获得一张表中某几行的排他锁

由于InnoDB存储引擎支持的是行级别的锁,因此意向锁其实是不会阻塞出全表扫以外的任何请求

技术分享

 

可以通过SHOW ENGINE INNODB STATUS来查看当前锁请求的信息

技术分享

可以看到SQL语句 select * from t where a<4 lock in share mode在等待。RECODE LOCKS space id 30 page no 3 n bits 72 index ‘PRIMARY‘ of table ‘test‘.‘t‘ trx id 48B89BD lock_mode X locks rec but not gap 表示锁住的资源。locks rec but not gap代表锁住的是一个索引,而不是一个范围

在InnoDB 1.0 版本之前,用户只能通过SHOW FULL PROCESSLIST,SHOW ENGINE INNODB STATUS来查看当前数据库中锁的请求,然后在判断事物锁的情况,从InnoDB 1.0开始。在Information_schema架构下添加了表INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS。通过这三张表,用户可以更方便的监控到当前事务并发分析可能存在的锁问题。看一下INNODB_TRX结构

技术分享

技术分享

通过state可以观察到trx_id为730FEE的事务当前正在运行,而trx_id为731F4的事务处于LOCK WAIT状态,且运行的SQL语句是select * from parent lock in shar mode。该表只是显示了当前运行的innoDB事务,并不能准确的判断锁的一些情况。如果需要查看锁,还需要访问 INNODB_LOCKS

技术分享

用户可以清楚的看到当前锁的信息,trx_id为730FEE的事务想表parent加了一个X的行锁。ID为7311F4的事务想表parent申请了一个S的行锁。lock_data都是1,申请相同的资源,因此会有等待。这样可以解析INNODB_TRX为什么一个事务的trx_state是RUNNING另一个是LOCK WAITLE

另外需要注意的是,发现lock_data并不是可信的值。例如当用户运行一个范围查找时,lock_data可能只返回第一行的主键值。与此同时,如果当前资源被锁住了。若锁住的页因为InnoDB存储引擎缓冲池的容量,导致页从缓冲池中被刷出,则查看INNODB_LOCKS表时,该值同样显示为NULL。即InnoDB存储引擎不会从磁盘进行再一次的查找

在通过INNODB_LOCKS馋看了每张表上锁的情况后,用户可以判断由此引发的等待情况。当事务较小时,用户就可以人为地、直观地进行判断了。但是当事务量非常大,其中锁和等待也时常发生。这个时候就不容易判断。但是可以通过INNODB_LOCK_WAITS可以很直观的反应出当前事务的等待。表INNODB_LOCK_WAITS由4个字段组成

技术分享

技术分享

通过上述的SQL语句,用户可以清楚的看到哪个事务阻塞了另一个事务。当然这只是给出了事务和锁ID,如果需要,用户可以根据表INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS得到更为直观的详细信息。例如,用户可以执行如下联合查询

技术分享

 

MySQL中锁的类型

标签:

热心网友 时间:2022-04-30 21:43

看你怎么划分了
典型的有表级别的锁
行级别的锁
为了实现可重复读,还有间隙锁
望采纳
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...下图方式对折一分为二裁开成为A2纸(如图(2) 明信片怎么样固定 为什么我的高考录取通知书还没有到? 梦见我孙女光秃秃的躺在路上的预兆 师兄请按剧本来分集剧情介绍(第1-40全集)大结局,几点更新,在哪个台播出... 发挥什么优势 三合一烤肠机接煤气罐接口可以换方向吗 关于福睿斯4年,3万公里保养问题请教? 福睿斯水箱加水在哪里 福睿斯水箱加水在哪里加 CSGO武器箱怎么获得 CSGO武器箱钥匙在哪买便宜 什么是食用胶水 奇瑞新QQ没有空调滤芯、打开空调车内岂不是会有很多灰尘? 无创dna做了十三天还没通知是好还是不好 奇瑞qq3冷暖风风量小 无创dna15天了还没结果.怎么办 什么食用胶耐高温 dell笔记本更换外壳是否当天可取,换D壳 有没有在吉林市产院做无创DNA的宝妈,我都20天了还没有短信结果通知 给电脑换个后盖(D壳)多少钱?如果自己有材料只需要请人动手就好,那样需要多少钱? 如何更换奇瑞QQ3汽油滤清器 华大医学检查的无创DNA十一天了还没有结果一直在检测中到底什么原因? 猪肉冻能加吃用明胶吗 弹弹堂的VIP可以用Q币充值吗? 政务公众号怎么开通和认证? 20岁了学散打还来的及么? 奇瑞QQ3有空调滤芯吗 微信公众平台认证能一次通过吗? 苹果手机摔了花屏了怎么办 弹弹堂 怎么充值 。 弹弹堂怎么充值??? 华硕电脑后壳碎了,售后可以更换吗? 奇瑞qq3暖风空调进气防尘网在哪个位置 这个问题更换D壳后能解决吗? 食用明胶的背景资料 联想的笔记本C壳D壳都被摔坏了,换一下多少钱,自己动手成功机会大吗 什么食用胶可以凝固,凝固后不怕高温蒸? 粉丝里含有食用胶吗?吃了对人体有什么危害? 笔记本换D壳的问题 有人知道这个圆圈的修图软件是什么嘛 笔记本电脑外壳摔碎了换个外壳要多少钱 联想电脑更换D壳要多少钱? IBM的手提电脑,鼠标插孔在哪? 神舟笔记本电脑鼠标接口在哪儿? 一张照片上有一个小圆圈 圆圈里面也是图片 这是什么作图软件 有人知道什么手机软件能在图片上画圈吗?图片中加&#11093;圆圈里面还有图片 明朝朱元璋的皇宫在南京哪里,现在能去吗? 积分是怎样来的,怎么算? 手机轰炸器是什么? excel日期排序时总有几列数据不对 怎么把手机锁屏的数字密码的皮肤改成自己的照片?