在分析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;
|