mysql锁表原因及解决
mysql锁表原因及解决
问题如图
锁表发生原因
- 锁表发生在
insert、update、delete
中; - 锁表的原理是数据库使用独占式
锁机制
,当执行上面的语句时,对表进行锁住,直到发生commit
或者rollback
或者退出数据库用户
; - 锁表的原因:
- A程序执行了对
table_1
的insert、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
超时)锁没了,那么基本上可以确定是业务代码导致,需要分析业务代码。
- A程序执行了对
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锁表原因及解决相关推荐
- mysql锁表问题的解决方法_MYSQL锁表问题的解决方法
本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...
- mysql锁表原因及解决方案
一.导致锁表的原因 1.锁表发生在insert update .delete 中: 2.锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回 ...
- MySQL 锁表后快速解决方法 及 锁表原因
前几天同事在晚上上线的时候执行sql语句造成锁表,想总结一下以避免后续发生. (1) 遇到锁表快速解决办法 依次执行1-6步,运行第6步生成的语句即可. 如果特别着急,运行 1 2 6 步 以及第6步 ...
- oracle锁表原因,解决方法
1.oracle数据库表在操作insert update .delete 时忘记提交事务或者回滚,就会发生锁表 2.锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发 ...
- 数据库锁表原因及解决思路
1.锁表发生在insert update .delete 中 2.锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回滚 或者退出数据库用户 3. ...
- mysql锁表_MYSQL锁表问题的解决方法
本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...
- MySQL锁表解决方法
MySQL锁表解决方法 参考文章: (1)MySQL锁表解决方法 (2)https://www.cnblogs.com/xiaoL/p/11099291.html 备忘一下.
- mysql导出数据不锁表_mysqldump锁表出错及解决方法
引言 研发需要某个 MySQL 表,需要运维这边导出来提供给他们. 问题 一般使用 mysqldump 命令即可,但从生产环境直接导出表有报错,如下: mysqldump: Got error: 10 ...
- MySQL锁表解决方法(转)
MySQL锁表解决方法 一.我的处理过程 1.查进程,主要是查找被锁表的那个进程的ID SHOW PROCESSLIST; 2.kill掉锁表的进程ID KILL 10866;//后面的数字即时进程的 ...
最新文章
- jbpm知识点——tasknode
- 如何入门学习自动驾驶感知技术?
- postDelayed总结
- 使用phpmaill发送邮件的例子
- 前端学习(2339):React出现的历史背景
- git 多用户多仓库配置
- 用c语言实现数据结构算法将两个有序链表并为一个有序链表的算法,,(完整版)数据结构-习题集答案-(C语言版严蔚敏)...
- [转载] python2.7中模块学习- textwrap 文本包装和填充
- jpl数据下载_火星上的AI:喷气推进实验室(JPL)的Tom Soderstrom访谈
- 震旦ad369s_震旦ad369s打印机驱动(震旦ad369s驱动程序) 安装版
- Android Studio 修改app名字和图标
- Spring+SpringMVC+MongoDB案例
- mysql数据库文件查找网站后台密码_怎么查看数据库的密码?
- 使用 f2py 包装 Fortran MPI 程序
- 【错误记录】python不常用的一个小操作:安装pip
- andriod中3g模块没有mac地址的原因
- sigmastar—ISP图像调试(AWB矫正)
- 微信是胖客户端瘦服务器,一款管理微信客户软件的系统体系结构设计?
- 一个简单的B站视频抽奖小程序
- 外置USB供电与内置锂电池供电自动切换电路