MySQL行锁解析(MySql锁机制)
行锁(偏写)
特点:
偏向InnoDB存储引擎,开锁大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁。
事务(行锁支持事务)
事务及其ACID属性
并发事务处理带来的问题:
更新丢失
脏读
不可重复读(解决方式为添加行锁)
幻读
事务隔离级别:(MYSQL默认可重复读)
案例分析:
建表SQL
行锁定基本演示(添加索引(行锁)不用全表扫描直接定位到行 ,使用主键也是用的行锁)
不同行更新没有问题
无索引,行锁升级为表锁
varchar类型写成数字让b列索引失效,此时session-2操作不同行也会进入等待
间隙锁危害
面试题:常考如何锁定一行
案例结论
行锁分析
优化建议
- 尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁。
- 合理设计索引,尽量缩小锁的范围
- 尽可能较少检索条件,避免间隙锁
- 尽量控制事务大小,减少锁定资源量和时间长度
- 尽可能低级别事务隔离