mysql会自动检测死锁,并自动kill后枷锁的链接,这样使得mysql很少出现由于死锁导致业务挂死问题,但如果某个事物长期枷锁,或因为某些其他原因导致锁表,就需要手动处理。
1、查看被锁住的事务
SELECT * from information_schema.INNODB_LOCKS;
2、查看哪些是等待的事务
SELECT * from information_schema.INNODB_LOCK_WAITS;
3、根据事务id查看事务线程id
SELECT * from information_schema.INNODB_TRX;
同时也可以查看所有的链接的情况
SHOW PROCESSLIST;
4、杀死加锁进程
kill 384403;
5、最后通过java异常日志到代码中寻找发生长时间被加锁的问题。