mysql 锁的现象和解决
2018-12-3 14:43:11 星期一
数据库锁了的现象:
一个进程进程一直在尝试更新, 而且杀不掉, 重启mysql以后还是会有;
一个update语句执行了很久;
写的业务都不可以, 查询也很慢
原因:
可能是事务没有提交/结束
比如, 一个事务开始了, 但是中途调用的其他方法除了错误, 或者方法不存在等导致事务一直没有结束
这里列出来找锁相关的SQL
1 show status like 'innodb_row_lock%'; 2 show processlist; 3 show status like 'table_locks%'; 4 show OPEN TABLES where In_use > 0;
查询当前执行中的事务
select * from information_schema.innodb_trx;
SELECT * FROM information_schema.INNODB_LOCKS SELECT * FROM information_schema.INNODB_LOCK_waits
参考1: https://blog.csdn.net/m0_37827567/article/details/82979767
"
不要盲目重启! 重启MySQL后进程消失但锁依然存在!
重启MySQL后进程消失但锁依然存在,因为回滚还要继续,这是mysql对数据的保护机制
...
结论: 时间过长的update、delete等语句在kill之后会进行回滚操作,会锁表,经常有人更换不同方式对大数据进行修改删除,然而盲目的杀死正在长时间运行的进程后并不能马上对表进行新的操作,后果只能是等待之前的操作回滚结束,本想用更快的方式操作表结果得不偿失,所以还是建议选择好对表修改操作方式然后一次运行,不再修改。
"
参考2 : https://blog.csdn.net/e421083458/article/details/38342051
show full processlist; 这个命令中最关键的就是state列
show status;
SHOW VARIABLES LIKE '%timeout%'