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

一、什么是死锁

加锁(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; # 杀掉有问题的sessionkill 15; kill 16;再次执行select * from information_schema.innodb_trx; # 查询锁事务状态信息
看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

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

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

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法 https://www.dachanpin.com/a/cyfx/11417.html

(0)
HashMap详解
上一篇 2023-05-12 03:17:30
看懂这篇文章,你就懂了Mybatis的二级缓存
下一篇 2023-05-12 03:18:32

相关推荐

  • 自主创业获助20万!青岛发放首笔退役军人创业贷款

        12月27日,首笔青岛市退役军人创业贷款在即墨区发放,退役军人个人自主创业贷款和创办的小微企业初创期创业贷款,银行可按照个人最高20万元、小微企业最高50万元的贷款额度发放创业贷款。     “近段时间,我正为扩大店面规模但缺少资金发愁,正在这个时候,即墨区退役军人事务局…

    创业分享 2023-05-12
  • 创业就业服务系列活动开展

    1、本网所载的文/图等稿件均出于为公众传播有益资讯信息之目的,并不意味着赞同其观点或证实其内容的真实性,我们不对其科学性、严肃性等作任何形式的保证 。如其他媒体、网络或个人从本网下载使用须自负版权等法律责任。 4、对于已经授权本站独家使用提供给本站资料的版权所有人的文章、图片等资料,如需转载使用,需取得本网站和版权所有人的同意。 3、凡本网站转载的所有的文章…

    创业分享 2023-05-13
  • 农民工17年开包子店的真实创业经验,想开店的借鉴!

    农民工17年开包子店的真实创业经验,想开店的借鉴! 2018-03-13 09:17 来源:小渠说创业 创客 /成功学 原标题:农民工17年开包子店的真实创业经验,想开店的借鉴! 我叫黄立新,江西瑞昌人,今年48岁。 我只读了初中,年轻时以打棉絮维持生计,从来也没有给别人打过工,也没有做过其它生意。 学艺弹棉花 1982年初中毕业没考上高中,加上家中穷,那是…

    创业分享 2023-05-15
  • 国台办授予北京大学新媒体营销传播(CCM)研究中心海峡两岸青年

    经北京大学批准,北京大学新媒体营销传播(CCM)研究中心由北京大学新闻与传播学院陈刚教授于2007年成立。多年来,围绕互联网营销传播领域的重大问题进行研究,是我国互联网发展的思想库。此次,北京大学新媒体营销传播(CCM)研究中心之所以被授予两岸青年就业创业示范点单位,主要源于以下两个方面的优势。 此次北京大学新媒体营销传播(CCM)研究中心被授予“海峡两岸青…

    2023-05-29
  • 如何在Kali Linux上编译Windows漏洞!

    Mingw-w64是一个用于创建Windows应用程序的自由和开源软件开发环境。 Mingw-w64最初叫Mingw32,它当时不支持64位架构。 在本教程中,我们将讨论如何使用Mingw-64在 Kali Linux上编译Windows漏洞。 让我们开始在Kali Linux上安装Mingw-w64。 1、在Kali Linux上安装Mingw-w64 默…

    创业分享 2023-05-25

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

工作时间:周一至周五,9:30-16:30,节假日休息