6-1 MySQL死锁排查

最后更新于:2022-04-02 07:44:18

#### 如果当前有锁等待情况,如何发现源头是哪个事务?怎么处理? 答: 1)查看当前事务中是否有锁信息: select trx_id,trx_state,trx_started,trx_requested_lock_id,trx_weight from innodb_trx; 2)查看锁信息(表锁or行锁,锁的那张表) select lock_id,lock_trx_id,lock_mode,lock_type,lock_table,lock_index from innodb_locks; 3)查看锁在等待那些事务 select * from innodb_lock_waits; #### 如何避免死锁发生 - 减小事务的大小,尽量分割。 - mysql 默认隔离级别是 可重复读,会产生间隙锁,增加死锁的概率,对应解决方法,修改为 提交读级别,此时binlog日志格式必须设置为 ROW 避免产生主从数据不一致。 - 查看具体产生死锁的sql,优化sql 避免产生全表扫描,该加索引加索引。
';