关于锁和事务的优化建议
知乎锁总结https://zhuanlan.zhihu.com/p/29150809
-
使用
RC隔离级别
-
精心设计索引
, 并尽量使用索引访问数据, 使加锁更更精确, 从而减少锁冲突的机会 -
选择
合理的事务大小
,小事务发生锁冲突的几率也更小 -
给记录集显式加锁时,
最好⼀次性请求足够级别的锁
。⽐比如要修改数据的话,最好直接申请排
他锁,而不是先申请共享锁,修改时再请求排他锁,这样容易产生死锁 -
不同的程序访问⼀组表时,应尽量
约定以相同的顺序访问各表
,对⼀个表而言,尽可能以固定
的顺序存取表中的行。这样可以大大减少死锁的机会 -
尽量
用相等条件访问数据
,这样可以避免间隙锁对并发插入的影响 -
除非必须,查询时不要显式加锁
。 MySQL的MVCC可以实现事务中的查询不⽤用加锁,优化事务
性能;MVCC只在COMMITTED READ(读提交)和REPEATABLE READ(可重复读)两种隔
离级别下⼯工作