范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Mysql的死锁与索引的关系

  前言
  在工作过程中,我们经常会碰到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 (加读锁) 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
  1
  张三   21
  4
  王一   26
  6
  小军   18
  9
  小红   23
  在上面的数据表我们可以得到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: ">" select * from user where id > 4 for update   加锁情况:默认 next-key lock (4,6],(6,9],(9,+suprenum] eg: "<" select * from user where id < 4 for update   加锁情况:默认 next-key lock (- ,1],(1,4] eg: ">=" (可以拆成 > 和 =) select * from user where id >= 4 for update   加锁情况:   ">4": 范围查询 默认 next-key lock (4,6],(6,9],(9,+suprenum]   "=4": 等值查询 默认next-key lock退化为 record key,id=4的索引项   ‘>=4’: 合并在一起加锁范围为: [4,6],(6,9],(9,+suprenum] eg: "<="(可以拆成 < 和 =) select * from user where id <= 4 for update   加锁情况:   ‘<4’: 范围查询 默认 next-key lock (- ,1],(1,4],这里有点特殊范围查询,需要访问不满足条件(<=4)的第一个值为止,因此找到了6;加锁范围 (- ,1],(1,4],(4,6]   "=4": 等值查询 默认next-key lock退化为 record key,id=4的索引项   ‘<=4’: 合并在一起加锁范围为: (- ,1],(1,4],(4,6] 案例:非唯一索引等值查询索引项存在eg:select * from user where age=21 lock in share model   加锁情况:   默认加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) 案例:非唯一索引范围查询eg:">" select * from user where age > 21 lock in share model   加锁情况:   默认加next-key lock (18,21], (21,23],(23,26], (26,+suprenum],   向右访问到不满足条件第一个值为止 (18,21], (21,23],(23,26], (26,+suprenum]   加锁范围 (18,21], (21,23],(23,26], (26,+suprenum] eg:"<" 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:">=" (可以拆成 > 和 =) select * from user where age >= 21 lock in share model   加锁情况:   ‘> 21 ’ 范围查询 (18,21], (21,23],(23,26], (26,+suprenum]   "= 21" 等值查询 (18,21], (21,23)   合并加锁范围 (18,21],(21,23],(23,26], (26,+suprenum] eg:"<="(可以拆成 < 和 =) 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 modelfor update 加的是写锁,写锁默认认为会对数据做更改,不管查询有没有涉及到回表都会对聚簇索引(主键索引)加锁 lock in share model 加的是读锁,如果没有涉及到回表(像覆盖索引),不会对聚簇索引(主键索引)加锁   如果上面例子中非唯一索引的查询用的是 select … for update,还需要分析聚簇索引(主键索引)的加锁情况(可参考文章https://www.jianshu.com/p/bf862c37c4c9)死锁   死锁指的是两个或两个以上的事物在执行过程中争抢锁资源而造成相互等待的情况   表锁不会出现死锁,主要还是针对InooDB的行锁,可以看下面的例子:   会话A与会话B 互相产生了死锁。 监控分析锁问题# 查询InnoDB锁的整体情况 # 可以重点查看Innodb_row_lock_waits和Innodb_row_lock_time_avg这两个值 # 如果数值较大,说明锁之间的竞争大 show status like "innodb_row_lock%"; #可以通过INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS这三个表 #分析可能存在的锁的问题 select * from information_schema.INNODB_TRX; # 查看所有事务 select * from information_schema.INNODB_LOCKS; # 查看锁 select * from information_schema.INNODB_LOCK_WAITS; # 查看锁等待   解决死锁:   超时等待,事物超时自动回滚(innodb_lock_wait_timeout 默认50s)   主动死锁检测,事物请求锁的时候采用 wait-for graph 等待图的方式进行死锁检测(innodb_deadlock_detect 默认on)   发现死锁也可以人为 kill 进程 总结MySQL锁分为全局锁、表级锁以及行级锁,不同的存储引擎支持锁的粒度有所不同,MyISAM 只支持到表级锁,InnoDB 则可以支持到行级锁,锁的粒度决定了业务的并发度,因此更推荐使用InnoDB InnoDB默认最小加锁粒度为行级锁,并且锁是加在索引上, 如果SQL语句未命中索引,则走聚簇索引的全表扫描,表上每条记录都会上锁,导致并发能力下降,增大死锁的概率 ,因此需要为表合理的添加索引, 线上查询尽量命中索引 行级锁默认加 next-key lock,而 根据不同的索引也有不同的加锁规则 ,我们可以根据加锁规分析加锁区间 锁粒度的减小提高了并发度的同时也增加了死锁的风险,查询应尽量考虑减少锁的范围

任天堂Wii创新游戏玩法的开拓者任天堂Wii是一款在2006年发售的游戏机,其主要特点是采用了运动控制器和互动性游戏玩法,从而为游戏市场带来了颠覆性的创新。任天堂wiiWii的控制器由主机运动控制器和Nunchu在激流时代,看见一线创业者的奋斗底色遍地开花的直播背后是怎样的生态链?精品咖啡的发展路上有多少人在坚持?长沙为什么有那么多网红店?爆红的上海安福路到底藏着多少新品牌业态?近期,腾讯视频推出的全新商业观察节目激流时代,走!到印尼市场去!本报记者孟妮中国商务新闻网去印尼能拿到订单吗?带着疑问和期许,做电子音响出口的某深圳企业负责人搭乘飞往印尼的国际航班,他此行是为了参加2023印尼电子商务大会。这场大会汇聚了整个印约基奇221710无缘今日最佳,里弗斯化身詹姆斯把湖人拉回附加赛20222023赛季NBA常规赛正在如火如荼的进行中,3月20日比赛结束后,来看下今日赛况以及各队球员数据之最掘金108102击败篮网掘金队波特砍下全队最高的28分,约基奇送出全队抗糖之主食篇很多高血糖的友友们以为抗糖是不能吃主食,这个想法是错误的。完全不摄入碳水化合物会危害身体健康,当身体长期缺乏可以能量的碳水化合物后,可能会诱发糖尿病酮症酸中毒,并且不吃主食会经常感炒木耳,下锅噼里啪啦太吓人?大厨教你3招,不炸锅,香又脆家里的黑木耳银耳黄花菜等干制的蔬菜,老妈每年都会在春节前后购买,特别是黑木耳,每次购买的都吃不完,总会剩下不少,放着放着就又到了第二年的腊月,老妈担心木耳变质,影响我们的身体健康,瑞幸咖啡月底开业,欢迎来到新加坡这个咖啡修罗场此前,在新加坡积极招聘的瑞幸咖啡终于要开业了。有网友分别在乌节路义安城和滨海广场附近,看到瑞幸咖啡的门店目前正在装修,牌上标注着即将在3月开业。瑞幸咖啡作为中国目前最大的咖啡连锁品吃雪莲果的好处不知道大家有没有喜欢吃雪莲果的,在超市里看促销员在大声吆喝着雪莲果便宜了,便宜又好吃,禁不住诱惑我也买了几个,看着像红薯,拿回家按照他们说的方法削皮后就可以吃,吃起来感觉口感清脆和烘焙教学高比克80S卡通抱抱饼干隐露厨房日式卡通小动物抱抱饼干两种口味多种造型丰富的表情,形状各异的小动物,让饼干更加软萌可爱,万物皆可抱抱!食材软化的黄油400g白砂糖200g常温鸡蛋4个低筋面粉780g(40它是西餐里的蜜雪冰城,人均30,年入100亿,它何以逆市增长它是一家诞生于1973年的意式餐厅。它在北京上海广州的餐厅,20元吃饱30元吃好50元吃扶墙跑。它多年不涨价,即便涨价也是十年涨一次价,涨价的幅度你也根本感觉不出来。它从不做外卖不最会做生意的女明星詹妮弗洛佩兹JenniferLopez2023年度奥斯典礼卡才结束,美国超级巨星詹妮弗洛佩兹(JenniferLopez)就与奢侈品REVOLVE合作推出了红毯系列的鞋子,这位创业巨星与Revolve合作推出了一系列全
二二一年全国姓名报告发布,给20后小孩取名的学问来了二二一年全国姓名报告发布,你家孩子撞名了吗?近日,公安部户政管理研究中心发布了二二一年全国姓名报告,这个报告已经连续发布三年。报告中有一些有趣的信息,比如2021年出生的孩子,名字使用人脸替换等深度合成服务拟需进行真实身份信息认证新华社北京1月28日电(记者王思北)国家互联网信息办公室28日公布互联网信息服务深度合成管理规定(征求意见稿),并向社会公开征求意见。根据征求意见稿,深度合成服务提供者应当依法对深专家房价下跌27才合理,央行8字表态,房地产或迎来降价潮金融专家朱云来曾发表演讲,国内大部分城市的房价严重偏离公民收入水平,对于很多家庭而言,即便是不吃不喝,也得工作10年才能买得起房子。为此,朱云来提出,房价下跌27才合理,即国内平均2021年,叫这个名字的新生儿最多!公安部发布2021年全国姓名报告中国姓名文化历史悠久,内涵丰富,人文情怀民俗风情历史积淀社会发展文化融合精神意趣等无不蕴藏其中,经过数千年积累演变,形成了独特的传统与文明。姓名,传承了人的情意志蕴含了人的精气神。中国男足12强赛02日本独生子女政策下的足球伪科学中国男足12强赛输给了日本,在令人失望这方面,男足从不让人失望。男足水平差,其实女足现在也不咋地,曾经的铿锵玫瑰看起来更像是昙花一现。在我看来,这和我国的独生子女政策有莫大关系。独美国秘密藏不住了?中国卫星拍到美国51区,图片信息量太丰富随着科技的发展,各国在科技发展的方面是巨大的,人类从陆地到海洋再到太空,一次次的探知未知区域,人类对于地球的了解越来越多,发现新物种的种类越来越多,海底潜艇探测仪让人类见识到深海的10位坚持租房住的明星有人为省钱做慈善,有人嫌房价太高买房难吗?对于一般的打工族来说,很难。那些风光无限的明星艺人们呢?是否也是同样的困难,这就不能下定论。在很多人看来,明星艺人们都是日进斗金的存在,其中不少人更是有着不少的副业,买房美国加息,中国降息,历年中美货币政策背离对股市的影响2021年12月6日,央行宣布年内第二次降准,12月8日央行下调支农支小再贷款利率0。25个百分点,宣告央行的货币政策走向宽松,2022年1月17日,央行下调逆回购一年期MLF利率过年走亲戚,女人不想化妆,记得吃7种补水菜,价格也不高俗话说男怕八月,女怕腊月,从进入腊月开始,女人就得忙碌起来。工作上拼业绩规划新的一年,回家后除了正常的家务外还得准备过年的食材衣服祭品等,非常辛苦。腊月天寒地冻,女人即使在脸上手上南海邮轮南海之梦邮轮西沙旅游线路和房间价格南海之梦邮轮西沙旅游西沙群岛是我国最南端的海岸线,目前只对中国公民开放,这里一半是海水,一半是梦幻。西沙群岛有西沙归来不看海,从此马代是路人之称,白沙,珊瑚,礁石等不同层次构成的海火箭一赚一赔,专家重排去年选秀,三黑马横空出世由于媒体的大肆鼓吹,刚进入联盟的那些新秀球员,也承受着巨大压力。在赛季过半的情况下,他们的表现和融入情况截然不同,有些球员不但迅速兑现自己的天赋,甚至还成为绝对核心有些球员的表现就余晚晚拍摄品牌大片展现精英女性独特光芒近日,著名青年慈善家投资人余晚晚与兰蔻合作拍摄菁纯系列品牌大片,展现精英女性独特光芒。近日,著名青年慈善家投资人余晚晚与兰蔻合作拍摄菁纯系列品牌大片,展现精英女性独特光芒。近日,著开端锅姨刘丹爆红中年女演员的春天要来了?在过去,演艺圈里提起刘丹这两个字,你会想起谁?或许,大多数观众,会想起杨幂的前公公,刘恺威的父亲刘丹。或者是出演还珠格格里香妃一角的女演员刘丹。遗憾的是,才爆红不久,刘丹就因为一场NBA起亚新秀榜随着2021年选秀的光芒四射,AyoDosunmu继续上升芝加哥的第二轮选秀权充分利用了最近爬梯子的机会,埃文莫布里坐在梯子上。AyoDosunmu,第38顺位选秀权,在球队处理伤病时在芝加哥的首发位置上表现出色。你给他们尽可能多的绳子。高中时期渐露峥嵘,大学时期却光芒万丈,带队夺得NCAA冠军一直想写一篇关于甜瓜安东尼的文章,但是不知道从哪里开始写,前几天我写了关于伊戈达拉的自传式文章,分成了三篇分发在了网站上,反响还比较热烈,于是我萌发了写瓜哥的念头,写得不好,大家也黑洞可以用于粒子加速器吗?大规模的模拟表明,超大质量黑洞可以将粒子加速到超高能量。几十年来,天体物理学家一直认为,地球上探测到的神秘的超高能量宇宙射线(UHECRs)可能来自活动星系核(AGN),即星系中心科学家沸腾了!哈勃发现一个黑洞在矮星系中点燃恒星总结黑洞经常被描绘成俘虏光的破坏性怪物,在美国宇航局哈勃太空望远镜的最新研究中,黑洞扮演着不那么邪恶的角色。位于矮星系Henize210中心的黑洞正在创造恒星,而不是吞噬它们。黑洞高手在民间,美博士生成功破解苹果摄像头,获得十万美元奖励作为市值超过三万亿美元的全球独角兽型科技公司,苹果对设备的安全性一向高度重视,这种重视不仅反映在对已知漏洞的及时修补上。除此之外,苹果还主动出资向相关专业人士悬赏,只要发现其软硬件中国冰雪运动前辈忆往昔训练掉进冰窟窿,进奥运村第一天就到五星红旗下2022北京冬奥会,举国期待。有这样一群人,他们对冬奥会的举办更是怀着深厚的感情,他们是中国冰雪运动的前辈中国速度滑冰首位世界冠军首个打破世界冠军的中国冰雪选手1980年中国奥运代3位清华学霸创业,拿百亿融资及2亿补贴,却4年半亏了150多亿移动支付的出现,是一场时代性的变革,让百姓们的生活发生了翻天覆地的改变。目前来看,我国算是全球移动支付最为发达的国家了,根据CNNIC的数据,截至2021年第二季度末,我国拥有8。5年9000万美元,想要换火箭的伍德?莱利别做梦了,不可能啊临近交易截止日,本赛季重建的火箭,交易流言是越来越多了。各种有意,多支球队都来报价,但就是没有什么实质性的进展。不过,这也比没有一点新闻要强,最起码现在还能有一些交易想法,让球迷们1。88亿美元买下曼哈顿最贵顶楼,马云蔡崇信为何善用家族基金?据台工商时报报道,阿里巴巴两大领军人物马云蔡崇信,传出又在美国纽约大买豪宅,两人旗下的BluePoolCapital最近斥资1。88亿美元,买下纽约曼哈顿最贵住宅大楼中央公园南22