mysql锁机制
2020-05-26 本文已影响0人
码农GG
一.定义
image.png
二.分类
1.从数据操作的类型(读、写)分:
读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响
写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。
2.从对数据操作的颗粒度:
表锁
行锁
三.三锁
1.表锁:
1.1特点:偏向MyISAM存储引擎,开销小,加锁快,无死锁,锁定粒度大,发生锁冲突的概率最高,并发最低
1.2.案例分析
image.png
1.3加读锁
image.png
image.png
image.png
1.4加写锁
image.png
image.png
1.5结论分析
image.png
1.6表锁分析
image.png
2.行锁
2.1 特点
偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁
2.2事务(Transation)及其ACID属性
image.png
2.3并发事务处理带来的问题
更新丢失(Lost Update)
脏对(Dirty Reads)
不可重复读(Non-Repeatable Reads)
幻读(Phantom Reads)
2.4事务隔离级别
image.png
2.5案例分析
image.png
2.6无索引行锁升级为表锁
varchar 不用 ' ' 导致系统自动转换类型, 行锁变表锁
2.7间隙锁危害
image.png
2.8行锁分析
image.png
image.png
2.9优化建议
1)尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁。
2)合理设计索引,尽量缩小锁的范围
3)尽可能较少检索条件,避免间隙锁
4)尽量控制事务大小,减少锁定资源量和时间长度
5)尽可能低级别事务隔离
3.页锁
了解