当前位置:网站首页>MySQ死锁
MySQ死锁
2022-07-30 03:25:00 【Leon_Jinhai_Sun】
死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环。
产生条件:
1.两个或以上事务
2.每个事务都已经持有锁并且申请新的锁
3.锁资源同时只能被同一个事务持有或者不兼容
4.事务之间因为持有锁和申请锁导致彼此循环等待
事务1和事务2分别为id=1,id=2的行设置了行锁。然后事务1在等待事务2释放id=2的行锁,而事务2在等待事务1释放id=1的行锁。 事务1和事务2在互 相等待对方的资源释放,就是进入了死锁状态。
解决死锁的方式:
1.设置超时时间。当一个事务等待时间到达阈值时,就回滚,另外的事务继续进行。缺点是等待时间过长往往无法接受,时间过短又容易误伤到普通的锁等待。
2.使用死锁检测处理。发现死锁后,主动回滚死锁链条中的某一个事务(将持有最少行级排他锁的事务进行回滚/最小undo量),让其他事务得以继续执行。
死锁检测的原理是构建一个以事务为顶点,锁为边的有向图,判断有向图是否存在环,存在即死锁。
缺点是每个新的被阻塞线程都要判断是不是因为它的加入导致了死锁,这比较费时。
解决思路:
1.关闭死锁检测。
2.控制并发访问量。比如同一行同时最多只有10个线程在更新,那么死锁检测的成本很低,就不会出现这个问题。
如何避免死锁?
1.合理设置索引,使SQL尽可能通过索引定位更少的行。
2.调整SQL执行顺序,避免长时间持有锁的SQL在事务前面。
3.尽量把大事务拆分成小事务处理。
4.并发度高的系统中不要显式加锁。
5.降低隔离级别。
边栏推荐
猜你喜欢

web初识

Leetcode.24 两两交换链表中的节点(递归)

杜教筛【莫比乌斯前缀和,欧拉函数前缀和】推导与模板【一千五百字】

【ModelArts系列】华为ModelArts训练yolov3模型(训练管理)

Are you still using the command line to read logs?Quickly use Kibana, visual log analysis YYDS

JUC (six): synchronized

【Node访问MongoDB数据库】

【GPU并行计算】利用OpenCL&OpenCLUtilty进行GPU并行计算

数据湖:数据集成工具DataX

对“不可能三角”发起挑战的公链们
随机推荐
un7.29:Linux——centos中如何安装与配置redis?
【ModelArts系列】华为ModelArts Notebook训练yolov3模型(开发环境)
华宝新能通过注册:拟募资近7亿 营收增加利润反而下降
中级-面试题目整理
乖宝宠物IPO过会:年营收25.75亿 KKR与君联是股东
Nacos配置中心
还在用命令行看日志?快用Kibana吧,可视化日志分析YYDS
SQL 入门之第一讲——MySQL 8.0.29安装教程(windows 64位)
MyCat中对分库分表、ER表、全局表、分片规则、全局序列等的实现与基本使用操作
Overview of Federated Learning (2) - Classification, Framework and Future Research Directions of Federated Learning
力扣(LeetCode)210. 课程表 II(2022.07.29)
Ansible简介(详细)特性+优点+设计理念+应用领域+系统架构+工作原理+任务执行流程
QT based on the third day (3) widget, dialog and mainwindow
【C补充】整数与字符串的转换
Stimulsoft ReportsJS and DashboardsJS. 2022.3.3
联邦学习综述(一)——联邦学习的背景、定义及价值
历经5面的阿里实习面经篇~
gnss rtcm rtklib Ntrip...
答对这3个面试问题,薪资直涨20K
Excuse me, when datax is synchronized to the oceanbase database, it is written according to the primary key update method. How to fill in the content in the drop-down box?