mysql锁表原因及解决

问题如图

锁表发生原因

  • 锁表发生在 insert、update、delete中;
  • 锁表的原理是数据库使用独占式锁机制,当执行上面的语句时,对表进行锁住,直到发生commit或者rollback或者退出数据库用户
  • 锁表的原因:
    • A程序执行了对table_1insert、update、delete,并还未commit时,B程序也对table_1进行insert、update、delete`时会发生资源正忙的异常,也就是锁表;
    • 锁表常发生与并发而不是并行(并行时,一个线程操作数据库时,另一个线程是能操作数据库的,cpu和i/o分配原则)
    • 锁表也发生在事务嵌套,外层事务对table_1进行了insert、update、delete内层事务(PROPAGATION_REQUIRES_NEW)也对table_1进行了insert、update、delete,内层事务commit的时需要等待外层事务先commit释放资源(但是是不可能的),最终导致死锁(本次问题就是事务嵌套导致)。多查几次SELECT * FROM information_schema.innodb_trx ;如果锁跟着业务结束(connect超时)锁没了,那么基本上可以确定是业务代码导致,需要分析业务代码。

mysql锁表解决

-- 找到超时的表,查询超时的SQL
SELECT * FROM information_schema.innodb_trx ;-- 查看当前被使用的表,查询是否有锁表
-- SHOW OPEN TABLES:列举在表缓存中当前被打开的非TEMPORARY表。
-- In_use:表当前被查询使用的次数。如果该数为零,则表是打开的,但是当前没有被使用。
show OPEN TABLES where In_use > 0;
-- 查询全局等待事务锁超时时间
SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout';-- 设置全局等待事务锁超时时间
SET  GLOBAL innodb_lock_wait_timeout=100;-- 查询当前会话等待事务锁超时时间
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';-- 查看进程id,然后用kill id杀掉进程
show processlist;
SELECT * FROM information_schema.PROCESSLIST;-- 查询正在执行的进程
SELECT * FROM information_schema.PROCESSLIST where length(info) >0 ;-- 查看被锁住的
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;-- 等待锁定
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;-- innodb_locks表在8.0.13版本中由performance_schema.data_locks表所代替,innodb_lock_waits表则由performance_schema.data_lock_waits表代替-- 杀掉锁表进程
kill 5601

事务嵌套引起的死锁

这时候就不能简单的kill掉进程了,需要review代码,找出问题代码

mysql锁表原因及解决相关推荐

  1. mysql锁表问题的解决方法_MYSQL锁表问题的解决方法

    本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...

  2. mysql锁表原因及解决方案

    一.导致锁表的原因 1.锁表发生在insert  update .delete 中:   2.锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回 ...

  3. MySQL 锁表后快速解决方法 及 锁表原因

    前几天同事在晚上上线的时候执行sql语句造成锁表,想总结一下以避免后续发生. (1) 遇到锁表快速解决办法 依次执行1-6步,运行第6步生成的语句即可. 如果特别着急,运行 1 2 6 步 以及第6步 ...

  4. oracle锁表原因,解决方法

    1.oracle数据库表在操作insert  update .delete 时忘记提交事务或者回滚,就会发生锁表  2.锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发 ...

  5. 数据库锁表原因及解决思路

    1.锁表发生在insert update .delete 中 2.锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回滚 或者退出数据库用户 3. ...

  6. mysql锁表_MYSQL锁表问题的解决方法

    本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...

  7. MySQL锁表解决方法

    MySQL锁表解决方法 参考文章: (1)MySQL锁表解决方法 (2)https://www.cnblogs.com/xiaoL/p/11099291.html 备忘一下.

  8. mysql导出数据不锁表_mysqldump锁表出错及解决方法

    引言 研发需要某个 MySQL 表,需要运维这边导出来提供给他们. 问题 一般使用 mysqldump 命令即可,但从生产环境直接导出表有报错,如下: mysqldump: Got error: 10 ...

  9. MySQL锁表解决方法(转)

    MySQL锁表解决方法 一.我的处理过程 1.查进程,主要是查找被锁表的那个进程的ID SHOW PROCESSLIST; 2.kill掉锁表的进程ID KILL 10866;//后面的数字即时进程的 ...

最新文章

  1. jbpm知识点——tasknode
  2. 如何入门学习自动驾驶感知技术?
  3. postDelayed总结
  4. 使用phpmaill发送邮件的例子
  5. 前端学习(2339):React出现的历史背景
  6. git 多用户多仓库配置
  7. 用c语言实现数据结构算法将两个有序链表并为一个有序链表的算法,,(完整版)数据结构-习题集答案-(C语言版严蔚敏)...
  8. [转载] python2.7中模块学习- textwrap 文本包装和填充
  9. jpl数据下载_火星上的AI:喷气推进实验室(JPL)的Tom Soderstrom访谈
  10. 震旦ad369s_震旦ad369s打印机驱动(震旦ad369s驱动程序) 安装版
  11. Android Studio 修改app名字和图标
  12. Spring+SpringMVC+MongoDB案例
  13. mysql数据库文件查找网站后台密码_怎么查看数据库的密码?
  14. 使用 f2py 包装 Fortran MPI 程序
  15. 【错误记录】python不常用的一个小操作:安装pip
  16. andriod中3g模块没有mac地址的原因
  17. sigmastar—ISP图像调试(AWB矫正)
  18. 微信是胖客户端瘦服务器,一款管理微信客户软件的系统体系结构设计?
  19. 一个简单的B站视频抽奖小程序
  20. 外置USB供电与内置锂电池供电自动切换电路

热门文章

  1. python的pyside2安装
  2. 图像的高频和低频如何区分
  3. javascript实现根据身份证号读取相关信息
  4. 规模化敏捷DevOps专业人士认证(SDP)
  5. string find()函数、string::npos的含义、erase()函数
  6. C语言实现MD5加密算法
  7. php 子都接受邮件,php iamp 接收邮件,收取邮件,获取邮件列表
  8. ansible部署LAMP架构
  9. python:机器学习(sklearn)(一)
  10. dl----算法常识100例