zoukankan      html  css  js  c++  java
  • 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%'

  • 相关阅读:
    Linux 文件及目录管理命令基础
    MHA高可用及读写分离
    MySQL的备份和回复
    mysql的主从复制
    MySQL索引管理及执行计划
    [LeetCode]Linked List Cycle II解法学习
    浅谈reverse_iterator的base()函数
    [LeetCode]LRU Cache有个问题,求大神解答【已解决】
    分享一篇不错的博文《写给准备参加秋招的学弟学妹们~一定要来看哦~》
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/iLoveMyD/p/10058408.html
Copyright © 2011-2022 走看看