- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一.Mysql锁类型和加锁分析
1、锁类型介绍:
MySQL有三种锁的级别:页级、表级、行级。
?表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最 高■并发度最低。
?行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最 低■并发度也最高。
?页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表 锁和行锁之间,并发度一般
算法:
next KeyLocks锁,同时锁住记录(数据),并且锁住记录前面的Gap
Gap锁,不锁记录,仅仅记录前面的Gap
Recordlock锁(锁数拯,不锁Gap)
所以其实 Next-KeyLocks=Gap 锁 + Recordlock 锁
二、死锁产生原因和示例
1、产生原因:
所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的 一种互相等待的现象,若无外力作用,它们都将无法推进下去?此时称系统处于死 锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。表级锁 不会产生死锁?所以解决死锁主要还是针对于最常用的InnoDBo
?死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。
?那么对应的解决死锁问题的关键就是:让不同的session加锁有次序
2、产生示例:
案例一
需求:将投资的钱拆成儿份随机分配给借款人。
起初业务程序思路是这样的:
投资人投资后,将金额随机分为儿份,然后随机从借款人表里面选儿个,然后 通过一条条select for update去更新借款人表里面的余额等。
例如两个用户同时投资,A用户金额随机分为2份,分给借款人1, 2
B用户金额随机分为2份,分给借款人2, 1
山于加锁的顺序不一样,死锁当然很快就出现了。
对于这个问题的改进很简单,直接把所有分配到的借款人直接一次锁住就行了。
Select * from xxx where id in (xx,xx,xx) for up date
在in里面的列表值mysql是会自动从小到大排序,加锁也是一条条从小到大加 的锁
例如(以下会话id为主键):
Session 1:
mysql select * from t3 where id in (9) for update;
I id I course I name I dime
I 8IWA If 12016-03-02 11:36:301
I 91JX If 12016-03-01 11:36:301
rows in set (0.04 sec)
Session2:
select * from t3 where id in (10,5) for update;
锁等待中
我实这个时候id=10这条记录没有被锁住的,但id=5的记录已经被锁住了, 锁的等待在id=8的这里,不信请看。
Sessions:
mysql select * from t3 where id=5 for up date;
锁等待中
Session4:
mysql select * from t3 where id=10 for up date;
I id I course 1 name I dime
I lOIJB Ig 12016-03-10 11:45:05 I
row in set (0.00 sec)
在其它session中id=5是加不了锁的,但是id=10是可以加上锁的。
案例二
在开发中,经常会做这类的判断需求:根据字段值査询(有索引),如果 不存在,则插入;否则更新。
以id为主键为例,U前还没有id=22的行
Session 1:
select * from t3 where id=22 for up date;
Empty set (0.00 sec)
session2:
select * from t3 where id=23 for up date;
Empty set (0.00 sec)
Session I:
insert into t3 values(22?ac7a\now());
锁等待中
Session2:
insert into t3 values(23?bc7b\now());
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transact ion
当对存在的行进行锁的时候(主键).inysql就只有行锁。
当对未存在的行进行锁的时候(即使条件为主键),mysql是会锁住一段范H (有gap锁)
锁住的范W为^
(无穷小或小于表中锁住id的最大值,无穷大或大于表中锁住id的最小值)
如:如果表中U询有已有的id为(H , 12)
那么就锁住02,无穷大)
如果表中UhuB有的
您可能关注的文档
- IIR数字滤波器设计实验报告.docx
- JDK安装与环境变量配置.docx
- Linux系统内存总结.docx
- M010-1山东电建一公司主要施工机械监督检查细则.docx
- MEMS陀螺仪工作原理.docx
- 2021MQ-7一氧化碳传感器简介.docx
- NDE(无损检测)管理程序.docx
- No.31相似三角形的应用.docx
- OHSAS18001职业安全卫生管理体系试行标准.docx
- Pandas中文官方文档之基础用法6.docx
- 2025浙江温州市公用事业发展集团有限公司面向高校招聘工作人考前自测高频考点模拟试题最新.docx
- 2025年蓬安县财政局下属单位招聘备考题库附答案.docx
- 广安市农业农村局2025年公开遴选市动物卫生监督所工作人员备考题库附答案.docx
- 南昌市劳动保障事务代理中心招聘3名劳务派遣驾驶员参考题库附答案.docx
- 2025浙江绍兴市新昌县机关事业单位招用编外聘用人员36人备考题库最新.docx
- 浙江国企招聘-2025嘉兴海盐县城市投资集团有限公司招聘7人笔试备考试题附答案.docx
- 长沙银行2026校园招聘备考题库最新.docx
- 2026年度中国地震局事业单位公开招聘备考题库附答案.docx
- 2025福建省晋江圳源环境科技有限责任公司招聘6人模拟试卷附答案.docx
- 浙江国企招聘-2025温州平阳县城发集团下属房开公司招聘5人公笔试备考试题附答案.docx
最近下载
- DB3204T1024 污水排入城镇污水管网排放口设置技术规范.pdf VIP
- 保安意识和保安职责(含Z07Z08)推荐.docx VIP
- gdc数字电影服务器ftp功能.pdf VIP
- 医疗设备智能化在心血管疾病治疗中的应用与效果评估教学研究课题报告.docx
- 《循环神经网络》PPT课件.pptx VIP
- 生成式AI在CV算法测试中的创新实践-2025研发效能最佳实践.pdf VIP
- 仪器制造技术名词解释.doc VIP
- 2025福建福州市江南智慧城市建设运营有限公司招聘10人备考题库附答案解析.docx VIP
- 高中物理选择性必修2教材习题答案.docx VIP
- 大学生职业生涯规划大赛获奖作品7206.pdf VIP
原创力文档


文档评论(0)