当前位置:网站首页>MySQL:意向共享锁和意向排它锁 | 死锁 | 锁的优化
MySQL:意向共享锁和意向排它锁 | 死锁 | 锁的优化
2022-08-09 04:13:00 【_索伦】
InnoDB表级锁
在绝大部分情况下都应该使用行锁,因为事务和行锁往往是选择InnoDB的理由,但个别情况下也使用表级锁;
1)事务需要更新大部分或全部数据,表又比较大,如果使用默认的行锁,不仅这个事务执行效率低,而且可能造成其他事务长时间等待和锁冲突;
2)事务涉及多个表,比较复杂,很可能引起死锁,造成大量事务回滚。
如:
LOCK TABLE user READ;读锁锁表
LOCK TABLE user WRITE; 写锁锁表
事务执行…
COMMIT/ROLLBACK; 事务提交或者回滚
UNLOCK TABLES; 本身自带提交事务,释放线程占用的所有表锁
意向共享锁 & 意向排它锁
使用表锁的时候,设计一个效率问题:
要获取一张表的共享锁S或排它锁X,最起码得确定,这张表没有被其他事务获取过X锁。
意向锁解决上面的问题:当要获取表的X锁时,不需要再检查表中哪些行锁(X或S)被占用,只需要检查 IS锁和 IX锁即可!
意向共享锁(IS锁):事务计划给记录加行共享锁,事务在给一行记录加共享锁前,必须先取得该表的IS 锁。
意向排他锁(IX锁):事务计划给记录加行排他锁,事务在给一行记录加排他锁前,必须先取得该表的IX 锁。

1、意向锁是由InnoDB存储引擎获取行锁之前自己获取的
2、意向锁之间都是兼容的,不会产生冲突
3、意向锁存在的意义是为了更高效的获取表锁(表格中的X和S指的是表锁,不是行锁!!!)
4、意向锁是表级锁,协调表锁和行锁的共存关系。主要目的是显示事务正在锁定某行或者试图锁定某行。
死锁
MyISAM 表锁是 deadlock free 的, 这是因为 MyISAM 总是一次获得所需的全部锁,要么全部满足,要么等待,因此不会出现死锁。但在 InnoDB 中,除单个 SQL 组成的事务外,锁是逐步获得的,即锁的粒度比较小,这就决定了在 InnoDB 中发生死锁是可能的。
mysql> select * from test_dead_lock where id=1 for update;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting
transaction

死锁问题一般都是我们自己的应用造成的,和多线程编程的死锁情况相似,大部分都是由于我们多个线程在获取多个锁资源的时候,获取的顺序不同而导致的死锁问题。因此我们应用在对数据库的多个表做更新的时候,不同的代码段,应对这些表按相同的顺序进行更新操作,以防止锁冲突导致死锁问题。
锁的优化建议
1.尽量使用较低的隔离级别
2.设计合理的索引并尽量使用索引访问数据,使加锁更加准确,减少锁冲突的机会提高并发能力
3.选择合理的事务大小,小事务发生锁冲突的概率小
4.不同的程序访问一组表时,应尽量约定以相同的顺序访问各表,对一个表而言,尽可能以固定的顺序存取表中的行。这样可以大大减少死锁的机会
5.尽量用相等条件访问数据,这样可以避免间隙锁对并发插入的影响
6.不要申请超过实际需要的锁级别
7.除非必须,查询时不要显示加锁
边栏推荐
- 软件质效领航者 | 优秀案例•东风集团DevOps改革项目
- 维护RAC日志轮转
- 软件质效领航者 | 优秀案例•国金证券DevOps建设项目
- 2022年安全员-A证特种作业证考试题库及在线模拟考试
- 5. Index optimization practice
- From brute force recursion to dynamic programming leetcode Question 62: Different paths
- 荣耀路由(WS831)做无线中继时LAN网段与WAN网段冲突解决方法
- etcd Study Notes - Getting Started
- 了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法:自适应滤波器的应用
- 助力To B业务,这类企业端数据值得风控童鞋关注
猜你喜欢

【数学建模绘图系列教程】绘图模板总结

『HarmonyOS』Page与AbilitySlice的生命周期

【平衡二叉搜索树】细撕AVL树的插入操作

30 范数

松柏集(云衣裳)

新一代CMDB构建方法,是能够给企业带来收益的

了解CV和RoboMaster视觉组(五)统计特征和global-based方法
![[Server data recovery] A case of data recovery when the Ext4 file system cannot be mounted and an error is reported after fsck](/img/65/f16bb466967993934719022145f78c.png)
[Server data recovery] A case of data recovery when the Ext4 file system cannot be mounted and an error is reported after fsck

OpenCV相机标定完全指南(有手就行)

NanoDet代码逐行精读与修改(五.1)检测头的构造和前向传播
随机推荐
Swift3.0 sets the background color and text color of the status bar
松柏集(夜未央)
leetcode 33/81. 搜索旋转排序数组
etcd Study Notes - Getting Started
【Redis底层解析】字典类型
5. Index optimization practice
MKNetworkKit replacing domain name wrong solution
【数学建模绘图系列教程】绘图模板总结
链接脚本-变量使用中遇到一个问题
【图形学】19 光照模型(四、Blinn-Phong光照模型)
Crosstalk and Protection
《剑指offer》题解——week1(持续更新)
了解CV和RoboMaster视觉组(五)运动建模与预测
Gopacket source code analysis
2022高处安装、维护、拆除考试练习题及模拟考试
为什么有的时间函数在同一事务内返回的都是同一值?
gopacket usage example
29 机器学习中常常提到的正则化到底是什么意思
新一代CMDB构建方法,是能够给企业带来收益的
2022年低压电工练习题及模拟考试