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 常见存储引擎的优劣
Jun 02 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
MySQL中的隐藏列的具体查看
Sep 04 MySQL
浅谈MySQL函数
Oct 05 MySQL
MySQL中一条update语句是如何执行的
Mar 16 MySQL
MySQL数据库如何使用Shell进行连接
Apr 12 MySQL
WINDOWS下安装mysql 8.x 的方法图文教程
Apr 19 MySQL
分析MySQL优化 index merge 后引起的死锁
Apr 19 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 MySQL
mysql sock 文件解析及作用讲解
Jul 15 MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 MySQL
MySQL存储过程及语法详解
Aug 05 MySQL
MySQL如何使备份得数据保持一致
MySQL索引 高效获取数据的数据结构
使用Mysql计算地址的经纬度距离和实时位置信息
Apr 29 #MySQL
解决Mysql中的innoDB幻读问题
Apr 29 #MySQL
详解Mysq MVCC多版本的并发控制
详解Mysql事务并发(脏读、不可重复读、幻读)
MySQL 条件查询的常用操作
Apr 28 #MySQL
You might like
PHP 编程请选择正确的文本编辑软件
2006/12/21 PHP
PHP面向对象分析设计的经验原则
2008/09/20 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
python web框架学习笔记
2016/05/03 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
PHP如何调用MYSQL存储过程
2014/05/30 面试题
C#笔试题和英文面试题
2013/02/07 面试题
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
标准导师推荐信(医学类)
2013/10/28 职场文书
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
秋季婚礼证婚词
2014/01/11 职场文书
趣味游戏活动方案
2014/02/07 职场文书
小学课外活动总结
2014/07/09 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
店铺转让协议书
2015/01/29 职场文书
加薪申请报告范本
2015/05/15 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书