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中between的边界,范围说明
Jun 08 MySQL
MySQL中几种插入和批量语句实例详解
Sep 14 MySQL
MySQL连接控制插件介绍
Sep 25 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
MySQL和Oracle批量插入SQL的通用写法示例
Nov 17 MySQL
MySQL 开窗函数
Feb 15 MySQL
MySQL 分区表中分区键为什么必须是主键的一部分
Mar 17 MySQL
为什么MySQL不建议使用SELECT *
Apr 03 MySQL
MySql重置root密码 --skip-grant-tables
Apr 11 MySQL
CentOS MySql8 远程连接实战
Apr 19 MySQL
MySQL数据库 任意ip连接方法
May 20 MySQL
DQL数据查询语句使用示例
Dec 24 MySQL
MySQL如何使备份得数据保持一致
MySQL索引 高效获取数据的数据结构
使用Mysql计算地址的经纬度距离和实时位置信息
Apr 29 #MySQL
解决Mysql中的innoDB幻读问题
Apr 29 #MySQL
详解Mysq MVCC多版本的并发控制
详解Mysql事务并发(脏读、不可重复读、幻读)
MySQL 条件查询的常用操作
Apr 28 #MySQL
You might like
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
PHP return语句的另一个作用
2014/07/30 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
python zip()函数使用方法解析
2019/10/31 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
Python3 main函数使用sys.argv传入多个参数的实现
2019/12/25 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
Python几种常见算法汇总
2020/06/02 Python
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
值传递还是引用传递
2015/02/08 面试题
制药工程专业职业生涯规划范文
2014/03/10 职场文书
篝火晚会主持词
2014/03/25 职场文书
委托协议书范本
2014/04/22 职场文书
班级心理活动总结
2014/07/04 职场文书
开工典礼致辞
2015/07/29 职场文书
旅游安全责任协议书
2016/03/22 职场文书