看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

一、什么是死锁

加锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。任何事务都需要获得相应对象上的锁才能访问数据,读取数据的事务通常只需要获得读锁(共享锁),修改数据的事务需要获得写锁(排他锁)。当两个事务互相之间需要等待对方释放获得的资源时,如果系统不进行干预则会一直等待下去,也就是进入了死锁(deadlock)状态。

二、死锁产生的场景

1.数据库表准备

1.1. 创建数据库表

#创建数据库create database chuanzhi;#选择数据库use chuanzhi;#创建测试表CREATE TABLE `tb_heima` (  `id` INT NOT NULL,  `username` VARCHAR(45) NULL,  PRIMARY KEY (`id`));#插入测试数据INSERT INTO `tb_heima` (`id`, `username`) VALUES ('1', '传智教育-教育行业A股IPO第一股');

2.死锁场景演示

2.1. 打开一个dos窗口

mysql -u账号 -p密码,进入mysql命令行输入:

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

开启一个事务,mysql> begin;

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

执行更新语句,mysql> update tb_heima set username = 'heima' where id =1;

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

注意:此时更新是成功的,但并未提交事务。

2.2.再打开一个dos窗口

登录mysql,开启另一个事务操作同上。再次执行更新语句,mysql> update tb_heima set username = 'heima' where id =1;

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

注意:此时第二个窗口处于等待中,需要等待第一个窗口释放写锁才能执行成功。

等待一段时候后,第二个窗口报错了

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

注意:由于第一个窗口未提交事务,导致第二个窗口在等待一段时候后,超过锁定等待超时。

三、解决死锁问题

通过mysql客户端工具连接,按照以下步骤执行。

select * from information_schema.innodb_lock_waits; #锁等待的信息,可以看到堵塞和被堵塞者

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

注意:超过锁定等待超时后,此条记录会消失,也就是说正在阻塞的记录在此表才能查看到。

select * from information_schema.innodb_trx; # 查询锁事务状态信息

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

注意:查询出死锁后,得到trx_mysql_thread_id死锁的id。

kill sessionId; # 杀掉有问题的session

kill 15;kill 16;

再次执行select * from information_schema.innodb_trx; # 查询锁事务状态信息

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

注意:确认此表是否存在锁事务记录,如果没有则说明死锁问题已经解决。

四、如何避免死锁

对于数据库的多表操作时,尽量按照相同的顺序进行处理,尽量避免同时锁定两个资源,如操作A和B两张表时,总是按先A后B的顺序处理, 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源。所有的update和delete操作必须走唯一索引SQL语句中不要使用太复杂的关联多表的查询;使用“执行计划”对SQL语句进行分析,对于有全表扫描的SQL语句,建立相应的索引进行优化。把SELECT放在Update语句前避免事务中的用户等待交互

文章来源于:王晴儿网页设计博客 欢迎分享交流,转载请注明出处

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/262674.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
黑马程序员黑马程序员订阅用户
上一篇 2023年5月10日 11:56
下一篇 2023年5月11日 15:59

相关推荐

  • 今日分享美国服务器常见网络攻击类型有哪些。

    美国服务器常见网络攻击类型有哪些? 随着互联网的普及和发展,网络安全问题日益严重,美国服务器作为一个重要的网络基础设施,经常受到各种网络攻击的威胁,本文将介绍美国服务器常见的网络攻击类型,帮助大家了解…

    2024年7月25日
    00
  • 今日分享WordPress优化:提升网站速度和用户体验。

    提升网站速度和用户体验是WordPress网站优化的重要目标,一个加载迅速且易于导航的网站可以显著提高用户满意度,减少跳出率,并有利于搜索引擎优化(SEO),以下是一些关键的WordPress优化策略: 1. 选择性能优秀的…

    2024年7月12日
    00
  • 说说谷歌云免费一年后怎么收费。

    谷歌云免费一年:让您的业务更上一层楼 随着互联网的快速发展,企业对于数据存储和处理的需求越来越高,为了满足这一需求,谷歌云推出了一项令人兴奋的优惠活动:免费使用谷歌云服务一年!本文将详细介绍如何充分利…

    2024年6月20日
    00
  • 数据库的库操作

    库:存储数据的仓库--起名称 表:存储数据的表,一个库可以创建多个表--起名称 字段:给表中的数据起名称 记录:具体一条数据 1.创建数据库 语句:create database 数据库名 库选项; 库选项:字符集、校对集 2.查询…

    2017年11月21日 MySQL自学教程
    0175
  • 我来教你phporm。

    PHP ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,它允许开发者用面向对象的方式操作数据库,通过使用 PHP ORM,开发者可以避免直接编写 SQL 语句,从而提高代码的可读性和可维护性,在本文中,我们…

    2024年6月20日
    00
  • 小编分享ThinkPHP6.1.2版更新了哪些内容。

    ThinkPHP 6.1.2版本的主要更新包括了兼容性的改进和功能增强。该版本增加了对PHP 8.2的兼容,同时也引入了对ThinkORM 3.0版本的支持。在功能更新方面,基础类中的Filesystem申明属性被移除,对container绑定参数时…

    2024年7月8日
    00
  • 我来教你vps网站搭建的步骤是什么。

    VPS网站搭建的步骤大致如下:选择合适的VPS计划,购买VPS服务器,登录服务器安装宝塔面板,宝塔面板环境搭建及站点设置,搭建Typecho环境,开启CDN防护。 VPS网站搭建的步骤如下: 1、选择合适的VPS服务商 你需要选…

    2024年7月17日
    00
  • 小编分享虚拟主机测试方法有哪些类型。

    虚拟主机测试方法的类型有很多,包括CPU性能测试、文件IO性能测试、内存性能测试、网络带宽测试和数据库性能测试等。这些方法可以帮助您评估虚拟主机的性能和稳定性。 虚拟主机测试方法简介 虚拟主机是一种共享服务…

    2024年7月25日
    00

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息