索引怎么解锁,photoshop索引

前言photoshop索引,在工作过程中,我们经常会碰到mysql的死锁问题,也是我们非常头疼的问题,今天老顾尝试着和小伙伴们一起学习一下mysql锁的相关知识点。锁分类我们经常说的就是表锁、以及行锁

前言

photoshop索引,在工作过程中,我们经常会碰到mysql的死锁问题,也是我们非常头疼的问题,今天老顾尝试着和小伙伴们一起学习一下mysql锁的相关知识点。

锁分类

我们经常说的就是 表锁、以及行锁

表锁:对整张表加锁

行锁:对表中的某条记录加锁

mysql数据库引擎支持的锁类型是不同的

MyISAM 只支持到表级锁

InnoDB 可以支持到行级锁

表锁

对整张表加锁,锁的颗粒度大,资源消耗小,并发请求低;表锁有2种模式:

1、表共享锁:对同一表的不阻塞读,但阻塞写。

2、表独占锁:对同一表的操作,不管是读写,都阻塞。

共享锁

独占锁

共享锁

兼容

冲突

独占锁

冲突

冲突

解锁,显式加表锁:lock tables {tb_name} read/write显式释放锁:unlock tables

行锁

我们今天的重点就是行锁,也就是死锁的根源所在。行级别的锁颗粒度小,开销比较大

锁模式:

1、共享锁(读锁)S锁:对同一行的操作,读不阻塞,写阻塞

2、排他锁(写锁)X锁:对同一行的操作,读写都阻塞

3、意向共享锁IS:一个事务想要加S锁,首先先获得该表的IS锁

4、意向排他锁IX:一个事务想要加X锁,首先先获得该表的IX锁

意向锁本质就是表锁,那为什么要有意向锁呢?

意向锁用来标识该表上有数据被加锁或将被加锁,对于表级别的请求(lock table....),就可以直接判断是否有锁冲突,不需要逐行检查锁的状态

S锁

X锁

IS锁

IX锁

S锁

兼容

冲突

兼容

冲突

X锁

冲突

冲突

冲突

冲突

IS锁

兼容

冲突

兼容

兼容

索引怎么解锁

IX锁

冲突

冲突

兼容

兼容

InnoDB锁方式

InnoDb的默认隔离级别RR(可重复读),在RR下读取数据的方式:

1、快照读:事务开启执行第一个SELECT语句后会获取一个数据快照,直到事物结束读取到的数据都是一致的

普通的 select… 查询都是快照读

2、当前读:读取的数据的最新版本,并且在读的时候不允许其它事物修改当前记录

select… lock in share mode(S锁)select… for update(X锁)

加锁方式:

普通 select… 查询 (不加锁)

普通 insert、update、delete… (隐式加写锁)

select…lock in share mode (加读锁)

1.点击图像后点击模式看到索引项。2.选择需要的选项点击即可解锁当前索引项。

select…for update (加写锁)

解锁方式:

提交/回滚事物(commit/rollback)

kill 阻塞进程

锁与索引

InnoDB的行锁是通过给索引上的索引项加锁来实现的

即使在建表的时候没有指定主键,InnoDB会默认创建一个DB_ROW_ID的自增字段为表的主键,并且其主键索引(聚簇索引)为GEN_CLUST_INDEX

主键索引也被称为聚簇索引

行锁类型

Record Lock: 对对应的索引记录项加锁,称记录锁

Gap Lock:对索引项之间的间隙加锁,加锁之后间隙范围内不允许插入数据,防止发生幻读

Next-key Lock:可以理解为Record Lock+Gap Lock(InnoDB行锁默认加的是 Next-key Lock)

记录锁

这个比较好理解,就是把表中的记录锁定。

间隙锁

编程的思想源于生活,生活中的例子能帮助我们更好的理解一些编程中的思想。

生活中排队的场景,小明,小红,小花三个人依次站成一排,此时,如何让新来的小刚不能站在小红旁边,这时候只要将小红和她前面的小明之间的空隙封锁,将小红和她后面的小花之间的空隙封锁,那么小刚就不能站到小红的旁边。

这里的小红,小明,小花,小刚就是数据库的一条条记录。

他们之间的空隙也就是间隙,而封锁他们之间距离的锁,叫做间隙锁。

加锁规则

行级锁默认加 next-key lock,查询过程中访问到的索引项都会加锁,而根据不同的索引也有不同的加锁规则:

唯一索引等值查询:

当索引项存在时,next-key lock 退化为 record lock;

当索引项不存在时,默认 next-key lock,访问到不满足条件的第一个值后next-key lock退化成gap lock

唯一索引范围查询:

默认 next-key lock,(特殊’<=’ 范围查询直到访问不满足条件的第一个值为止)

非唯一索引等值查询:

默认next-key lock ,索引项存在/不存在都是访问到不满足条件的第一个值后next-key lock退化成gap lock

非唯一索引范围查询:

默认 next-key lock,向右访问到不满足条件的第一个值为止

针对这几种情况分别举例说明一下,假设我有以下数据:

id

name

age

张三

王一

小军

小红

在上面的数据表我们可以得到5个next-key lock 区间:

唯一索引(id):(-∞,1],(1,4],(4,6],(6,9] ,(9,+supremum]

非唯一索引(age):(-∞,18],(18,21],(21,23],(23,26] ,(26,+supremum]

案例:唯一索引等值查询

索引项存在

eg:select * from user where id=4 for update

加锁情况:

默认加next-key lock (1,4],因索引项存在,则next-key lock退化为 record key,只对id=4的这个索引项的record key

索引项不存在

eg:select * from user where id=5 for update

加锁情况:

默认加next-key lock (4,6],访问不满足条件id=6后next-key lock退化为grap lock,加锁范围(4,6)

案例:唯一索引范围查询

eg: &39;select * from user where id > 4 for update

加锁情况:默认next-key lock (4,6],(6,9],(9,+suprenum]

eg: &39;select * from user where id < 4 for update

加锁情况:默认next-key lock (-∞,1],(1,4]

eg: &39; (可以拆成 > 和 =)select * from user where id >= 4 for update

加锁情况:

&39;: 范围查询 默认next-key lock (4,6],(6,9],(9,+suprenum]

&39;: 等值查询 默认next-key lock退化为record key,id=4的索引项

‘>=4’: 合并在一起加锁范围为:[4,6],(6,9],(9,+suprenum]

eg: &39;(可以拆成 < 和 =)select * from user where id <= 4 for update

加锁情况:

‘<4’: 范围查询 默认next-key lock (-∞,1],(1,4],这里有点特殊范围查询,需要访问不满足条件(<=4)的第一个值为止,因此找到了6;加锁范围 (-∞,1],(1,4],(4,6]

&39;: 等值查询 默认next-key lock退化为record key,id=4的索引项

‘<=4’: 合并在一起加锁范围为:(-∞,1],(1,4],(4,6]

案例:非唯一索引等值查询

索引项存在

加锁情况:

默认加next-key lock (18,21], (21,23];

访问到不满足条件age=23后next-key lock退化为grap key

加锁范围(18,21], (21,23)

索引项不存在

eg:select * from user where age=19 lock in share model

加锁情况:

默认加next-key lock (18,21]。

访问不满足条件age=21后next-key lock退化为grap lock

加锁范围(18,21)

案例:非唯一索引范围查询

加锁情况:

向右访问到不满足条件第一个值为止 (18,21], (21,23],(23,26], (26,+suprenum]

或者直接单击图层右侧的小锁图标进行解锁,而这种【索引】图层是无法通过双击解锁的,解锁需要选择【图像】-【模式】-【RGB颜色】,这种图层上方的锁定按钮,有一个或多个处于锁定状态的,单击图层右侧的小锁图标可以全部解除。

加锁范围 (18,21], (21,23],(23,26], (26,+suprenum]

eg:&39;select * from user where age < 21 lock in share model

第一种是最常见的,打开一张图片,默认为背景,该背景图层通常都是锁定的,解锁只需要双击该图层即可。或者按住小锁,拖动到垃圾桶图标,也可解锁。第二种就是索引图层,由于纸张打印无法输出所有电脑屏幕能显示的颜色,索引。

加锁情况:

默认加next-key lock (-∞,18], (18,21]。

向右访问到不满足条件第一个值为止 (-∞,18], (18,21],(21,23]

加锁范围 (-∞,18], (18,21],(21,23]

eg:&39; (可以拆成 > 和 =)select * from user where age >= 21 lock in share model

加锁情况:

‘> 21 ’ 范围查询 (18,21], (21,23],(23,26], (26,+suprenum]

&39; 等值查询 (18,21], (21,23)

合并加锁范围 (18,21],(21,23],(23,26], (26,+suprenum]

eg:&39;(可以拆成 < 和 =)select * from user where age < 21 lock in share model

加锁情况:

‘< 21 ’: 范围查询 (-∞,18], (18,21], (21,23]

‘= 21 ’: 等值查询 (18,21], (21,23)

合并加锁范围 (-∞,18], (18,21],(21,23]

细心一点你会发现上面例子中:

唯一索引的查询用的是 select … for update

非唯一索引的查询用的是 select … lock in share model

for update 加的是写锁,写锁默认认为会对数据做更改,不管查询有没有涉及到回表都会对聚簇索引(主键索引)加锁lock in share model 加的是读锁,如果没有涉及到回表(像覆盖索引),不会对聚簇索引(主键索引)加锁

死锁

死锁指的是两个或两个以上的事物在执行过程中争抢锁资源而造成相互等待的情况

表锁不会出现死锁,主要还是针对InooDB的行锁,可以看下面的例子:

会话A与会话B 互相产生了死锁。

监控分析锁问题

可以重点查看Innodb_row_lock_waits和Innodb_row_lock_time_avg这两个值39;innodb_row_lock%&可以通过INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS这三个表 查看所有事务select * from information_schema.INNODB_LOCKS;查看锁等待

解决死锁:

超时等待,事物超时自动回滚(innodb_lock_wait_timeout 默认50s)

主动死锁检测,事物请求锁的时候采用 wait-for graph 等待图的方式进行死锁检测(innodb_deadlock_detect 默认on)

发现死锁也可以人为 kill 进程

总结

MySQL锁分为全局锁、表级锁以及行级锁,不同的存储引擎支持锁的粒度有所不同,MyISAM 只支持到表级锁,InnoDB 则可以支持到行级锁,锁的粒度决定了业务的并发度,因此更推荐使用InnoDB

InnoDB默认最小加锁粒度为行级锁,并且锁是加在索引上,如果SQL语句未命中索引,则走聚簇索引的全表扫描,表上每条记录都会上锁,导致并发能力下降,增大死锁的概率,因此需要为表合理的添加索引,线上查询尽量命中索引

行级锁默认加 next-key lock,而根据不同的索引也有不同的加锁规则,我们可以根据加锁规分析加锁区间

锁粒度的减小提高了并发度的同时也增加了死锁的风险,查询应尽量考虑减少锁的范围

要解锁索引层,并不能按常规的解锁方法。图层面板中其他按钮都是灰色的,没解锁的按钮。但,只要我们把图层颜色修改为RGB模式,即可解锁。鼠标移到菜单栏这里,点:图像 在弹出的下拉菜单中再点:模式,接着,右边又弹出子。

上一篇 2023年01月17 17:36
下一篇 2023年01月10 13:47

相关推荐

  • qq号怎么注销,怎样直接强制注销QQ账号

    [海峡网]QQ,几乎可以说伴随着互联网时代年轻人的成长,也承载了我们很多人的青春和回忆。随着互联网的发展和社交软件的增多,或许我们曾舍弃过、遗忘过甚至更换过QQ,但如果有一天,我们可以注销自己的QQ号

    2023年01月16 280
  • 怎么开通公众号,如何用别人的身份证注册微信

    想要经营公众号,得先有一个属于自己的公众号,下面以订阅号(个人公众号)为例子(其他类型公众号也差不多)。一、在电脑浏览器搜索微信公众平台或输入网址()二、点击立即注册三、点击订阅号四、填写基本信息(填

    2023年01月16 236
  • 宽带账号和密码怎么查,手机查询自家宽带账号和密码

    我们以电信为例。手机查询自家宽带账号和密码,我们在办理电信宽带的时候,宽带安装人员一般会将光纤的账号和密码写在光猫的贴纸上,如果确实把宽带账号密码给忘记了,不要慌张可以通过以下步骤找回。①如需查询联通

    2023年01月09 299
  • 贴膜定位神器怎么用,手机钢化膜定位神器怎么用

    现如今,在很多的手机店,手机维修店,摆地摊贴膜等场所,我们都可以见到膜切机的存在。因为膜切机切割手机保护膜的一种机器,它的体积小,重量轻,能够切割手机前保护膜和手机背膜,几乎能支持所有手机型号的切割,

    2023年01月23 229
  • 苹果怎么验机,苹果手机到货后怎么验货

    很多小伙伴喜欢购买二手iphone,或者其它版本的设备,苹果手机到货后怎么验货,又或者在第三方平台购入的新设备,无非就是图价格方面的优惠,在这里小编是不建议大家在一些不正规渠道进行购买的,相对正规渠道

    2023年02月03 233
  • 微信怎么截图聊天记录

    1.常见拼接模式电影字幕截图微信聊天记录、照片和电影各自的长截图2.常见截图工具2.1.LongShot+免费,有广告(关闭网络授权可关闭)+支持自动滚屏截图(安卓7.0+)+支持一键截取完整网页+支

    2023年01月19 200
  • 怎样提高路由器网速,路由器参数如何设置网速最快

    今天教大家如何设置我们这个WiFi的高速和穿墙模式,可以给我们家里的网速呢提升十倍。相信很多朋友呢都有注意到过这样的问题,当我们拿着手机从客厅走进卧室,或者是离我们的路由器远一些的时候,这个WiFi的

    2023年01月02 266
  • qq打不开怎么回事,手机qq突然打不开了

    当下,电脑越来越普及,大家在使用过程中有没有遇到一些疑问呢?其实我们完全可以自己解决哦~Q1QQ能登上但网页打不开,显示DNS错误,咋整?DNS相当于网络上的地图,给不同网络IP地址的用户指明方向的,

    2023年01月17 233
  • 怎样取消微信授权登录

    如果问你的手机每天必用的APP是哪个?微信——肯定榜上有名。但天天使用微信,你对它的功能真的都很了解吗?1、首先打开微信,在“我”的页面中找到并点击设置。2、其次找到隐私选项,点进去找到隐私管理一项。

    2023年01月03 303
  • 联通大王卡怎么注销

    中国联通是现在很多伙伴都在使用的手机、电脑网络,现在有很多伙伴询问手机卡不再使用了,怎么进行注销,下面就来看看中国联通手机卡怎么注销,联通手机卡注销图文教程!联通手机卡注销图文教程:方法一:曾经有报道

    2023年01月21 226
  • 怎么做网站推广,推广网站首页的方式有哪些

    今天,我们将解释三种非常有效的网站推广方法,主要针对营销网站,如销售产品。一、品牌词推广、口碑营销推广品牌词是什么意思?比如你的网站名字叫某某网(自己编的)。百度之前没有出现过这个词,百度搜索后也没有

    2023年01月12 207
  • 怎么root,手机一键root工具

    如果是前者的话,你直接点击授权就可以了!后者的话,说明你手机没有完全root成功,你可以在电脑上面使用应用宝来重新检测,再次进行手机root的,手机一键root工具,一般root成功,是会有相关提示的

    2023年01月11 227
  • win7屏幕保护怎么设置,windows7怎么设置待机屏保

    经常听到小伙伴抱怨:“不知道电脑安装哪些软件好”“想要实用又能提高效率的”,windows7怎么设置待机屏保,今天我就给大家整一期“Windows高质量软件分享”!,每一款软件都有“过人之处”,详细内

    2023年02月05 210
关注微信