查看死锁的方法有两种:
通过show engine innodb status命令可以查看最后一个死锁的情况
通过innodb_print_all_deadlocks参数配置可以将所有死锁的信息都打印到MySQL的错误日志中
减少死锁发生的方法:
尽可能的保持事务小型化,减少事务执行的时间可以减少发生影响的概率
及时执行commit或者rollback,来尽快的释放锁
当要访问多个表数据或者要访问相同表的不同行集合时,尽可能的保证每次访问的顺序是相同的。比如可以将多个语句封装在存储过程中,通过调用同一个存储过程的方法可以减少死锁的发生
增加合适的索引以便语句执行所扫描的数据范围足够小
尽可能的少使用锁,比如如果可以承担幻读的情况,则直接使用select语句,而不要使用select…for update语句
如果没有其他更好的选择,则可以通过施加表级锁将事务执行串行化,最大限度的限制死锁发生