MySQL 执行数据库更新update操作的时候数据库卡死了


Posted in MySQL onMay 02, 2022

执行数据库更新update操作的时候数据库卡死了

问题分析

一般都是数据库事务未提交,导致update或者delete卡死。

解决办法

  1. 在执行完更新或删除后,记得将事务提交commit;
  2. 找到数据库客户端,执行commit操作。

如果还不行。 那么应该是数据库在执行数据操作失败 or 事务未提交 之后,将需要执行的sql语句锁死了。

过程复现和解决

通过如下命令查看数据库的自动提交状态

show variables like 'autocommit';

通过SQL设置数据库自动自动提交为关闭

-- on为开启,off为关闭
set autocommit=off;
-- 或者1为开启,0为关闭
set autocommit=0;

表中数据如下:
MySQL 执行数据库更新update操作的时候数据库卡死了
打开两个窗口分别执行update操作

update car set color ='银色' where id = 1;
update car set color ='红色' where id = 1;

查询正在执行的事务:

SELECT * FROM information_schema.INNODB_TRX;

MySQL 执行数据库更新update操作的时候数据库卡死了
根据图中事务的线程ID(trx_mysql_thread_id)可以看出对应的mysql 线程:一个1084 (update正在等待锁)另一个是1089(update 正在执行 没有提交事务)

可以使用mysql命令杀掉线程:kill 线程id

kill 1089;

期间如果并未杀掉持有锁的线程:则第二个update语句会提示等待锁超时。
MySQL 执行数据库更新update操作的时候数据库卡死了
相关命令:

-- 查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

-- 查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
-- 查询mysql数据库中存在的进程
select * from information_schema.`PROCESSLIST`(show processlist;)

扩展

oracle的操作方式:

  1. 查询锁定记录
SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;
  1. 删除锁定记录
ALTER system KILL session 'SID,serial#';

Tags in this post...

MySQL 相关文章推荐
MySQL 逻辑备份与恢复测试的相关总结
May 14 MySQL
MySQL中出现乱码问题的终极解决宝典
May 26 MySQL
带你学习MySQL执行计划
May 31 MySQL
MySQL8.0无法启动3534的解决方法
Jun 03 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
MySQL8.0的WITH查询详情
Aug 30 MySQL
MySQL修炼之联结与集合浅析
Oct 05 MySQL
Mysql如何实现不存在则插入,存在则更新
Mar 25 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
为什么MySQL8新特性会修改自增主键属性
Apr 18 MySQL
MySql数据库 查询时间序列间隔
May 11 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
MySQL如何使备份得数据保持一致
MySQL索引 高效获取数据的数据结构
使用Mysql计算地址的经纬度距离和实时位置信息
Apr 29 #MySQL
解决Mysql中的innoDB幻读问题
Apr 29 #MySQL
详解Mysq MVCC多版本的并发控制
详解Mysql事务并发(脏读、不可重复读、幻读)
MySQL 条件查询的常用操作
Apr 28 #MySQL
You might like
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
php数组合并的二种方法
2014/03/21 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
js 动态选中下拉框
2009/11/26 Javascript
JS DOM 操作实现代码
2010/08/01 Javascript
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
Python 创建子进程模块subprocess详解
2015/04/08 Python
Python连接DB2数据库
2016/08/27 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
给领导的检讨书
2014/02/16 职场文书
爱心倡议书范文
2014/05/12 职场文书
个人事迹材料范文
2014/12/29 职场文书
聘任证明怎么写
2015/03/02 职场文书
Java完整实现记事本代码
2022/06/16 Java/Android
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python