MyISAM表锁定优化:
缩短锁定时间,让Query执行时间尽可能地短,提高并发度。
1、尽量减少大的复杂的Query,将复杂Query分拆成几个小的Query分步进行;
2、尽可能地建立足够高效的索引,让数据检索更迅速;
3、尽量让MyISAM存储引擎表只存放必要的信息,控制字段类型 ;
4、利用合适的机会优化MyISAM表数据文件。
InnoDB行锁优化建议:
1、尽可能地让所有数据检索都通过索引来完成,从而避免InnoDB因为无法通过索引键加锁面升级为表级索引;
2、合理设计索引,让InnoDB在索引上面加锁的时候尽可能准确,尽可能地缩小锁定范围,避免造成不必要的锁定而影响其他Query的执行;
3、尽可能减少基于范围的数据检索过滤条件,避免因为间隙带来的负面影响而锁定了不该锁定的内容;
4、尽量控制事务的大小,减少锁定的资源量锁定时间的长度;
5、在业务环境允许的情况下,尽量使用较低级别的事务隔离,以减少MySQL因为实现事务隔离级别所带来的附加成本。
由于InnoDB的行级锁定和事务性,肯定会引起死锁。下面几点建议,可针对合适的业务进行优化。
1、类似业务模块中,尽可能地按照相同的访问顺序来访问,防止产生死锁;
2、在同一个事务中,尽可能地做到一次锁定所有资源,减少死锁产生的频率;
3、对于一个非常容易产生死锁的业务部分,可以尝试使用升级锁的粒度,通过表级锁定来减少死锁的概率。