在分析innodb中锁阻塞时,几种方法的对比情况

(1)使用show processlist查看不靠谱;
(2)直接使用show engine innodb status查看,无法判断到问题的根因;
(3)使用mysqladmin debug查看,能看到所有产生锁的线程,但无法判断哪个才是根因;
(4)开启innodb_lock_monitor后,再使用show engine innodb status查看,能够找到锁阻塞 的根因。

常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-- 查看innodb引擎的运行时信息
show engine innodb status;
show engine innodb status\G;
-- 查看服务器状态
show status like '%lock%';
-- 查看超时时间:
show variables like '%timeout%';

-- mysql查看被锁住的表
-- 查询是否锁表
show OPEN TABLES where In_use > 0;
-- 查看所有进程
show processlist;
show full processlist;
-- 杀掉指定mysql连接的进程号
kill $pid
-- 查询死锁表 
SELECT GROUP_CONCAT(CONCAT('kill ',id) SEPARATOR '; ') AS cmd FROM information_schema.processlist WHERE command='execute';
-- 查询运行的事务锁
SELECT * FROM information_schema.INNODB_TRX;
-- 查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 
-- 查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;