Linux ----------Mysql死锁状态解除方法

[toc]

一、解决死锁方法

MySQL有三种锁的级别:页级、表级、行级。

1.1 方案一:

1、查看是否有锁表 show OPEN TABLES where In_use > 0;

2、查询进程(如果你有SUPER权限,你可以看到所有线程。否则,只能看到你自己的线程) show processlist;

3、杀死进程id(就是上面命令的id列) kill id

1.2 方案二:

1、查看在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

2、杀死进程id(就是上面命令的trx_mysql_thread_id列) kill id

二、避免出现死锁

死锁出现的原因:根本的原因是程序逻辑的顺序,最常见的是交差更新,多个事务在同一个表或多个表上同时读写提交

2.1 事务优化

设置事务优先级:保持事务的轻量,越是轻量的事务,占有越少的锁资源,这样发生死锁的几率就越小

2.2 sql语句优化

避免使用子查询,尽量使用主键等等,越早提交事务,锁就越早释放

2.3 配置优化

设置超时时间:事务处理时间超过设定时间就退出

猜你喜欢

转载自www.cnblogs.com/wangchengshi/p/11820471.html