MySQL-僵持锁

news2024/11/18 3:37:30

前言

一个僵持锁(deadlocks)是指锁处于僵持的状态,持有锁的事务既得不到期望的资源,也不愿意释放其他事务需要的资源,也就是,多个锁相互之间都持有其他锁所需的资源,所有的事务都在等待各自需要的可用的资源,但是所有的事务都不会释放各自持有的锁,从而引起持有这些锁的事务僵持不下,无法再向前执行事务。

当多个事务(以语句UPDATE or SELECT ... FOR UPDATE),以相反的方向,锁住多个数据表的多个行记录的时候,容易发生僵持锁的情况。当多个事务锁住一定范围内的索引记录以及索引记录之间的间隙的时候,并且这些事务需要的资源相同,由于时间性的原因(事务执行时间太长),容易发生僵持锁的情况。

为了降低发生僵持锁的可能性,使用事务代替LOCK TABLES语句,并且保证事务执行插入或者更新操作的数据量足够小,而不会消耗太多的时间。当需要执行大数量的更新的时候,保持所有事务在相同的顺序中执行,执行语句SELECT ... FOR UPDATE 或者语句UPDATE ... WHERE的数据表需要对操作的列建立索引。由以上的分析可知,僵持锁不会受到事务隔离级别的影响,因为,事务隔离级别只是约束读操作的行为,而僵持锁的发生是与写操作的执行顺序有关。

当僵持锁的探测功能开启(默认是开启的)以及僵持锁发生的时候,InnoDB探测执行语句的条件并且对发生僵持锁的事务执行回滚操作,如果属性选项innodb_deadlock_detect的僵持锁探测功能关闭,则InnoDB使用属性选项innodb_lock_wait_timeout提供的超时设置,当锁僵持的时间超出限制,对发生僵持锁的事务执行回滚操作。

僵持锁示例

假设,存在两个客户端A、B,其执行的流程如下所示,首先,客户端A创建两个数据表Animals、数据表Birds,并且对这些表插入一些数据,随后,客户端A开启一个事务,以共享锁的模式对数据表Animals执行查询操作:

随后,客户端B开启一个事务,以共享锁的方式对数据表Birds执行一个查询操作,如下所示:

随后,客户端B对数据表Animals执行更新操作,如下所示:

同时,客户端A对数据表Birds 执行更新操作,此时,发生僵持锁,如下所示:

查看InnoDB的获取僵持锁的统计信息,如下所示:

僵持锁探测

如前面所述,InnoDB是默认开启自动探测僵持锁的功能,一旦出现僵持锁,则回滚持有僵持锁的事务,如果自动探测僵持锁的功能是关闭的,则InnoDB提供超时机制,一旦僵持锁的持续时间超出时间的限制,则自动回滚持有僵持锁的事务。在回滚僵持锁的时候,InnoDB将选择较小的事务执行执行回滚操作,例如,处理数据量小的事务。

僵持锁处理

合理组织事务中语句的执行顺序能够降低出现僵持锁的几率,提供以下的方法:

  • 实时监控数据库的执行情况,使用语句SHOW ENGINE INNODB STATUS监控发生僵持锁的日志信息,实时分析以及及时做出对策与调整。

  • 如果运行环境中频繁地出现僵持锁的情况,则开启innodb_print_all_deadlocks输出MySQL的错误日志信息,待僵持锁的问题已解决,则关闭调试日志的输出以免影响MySQL服务的运行性能。

  • 由于MySQL提供自动回滚僵持锁的事务,待MySQL回滚事务完成,则业务应用可以提供方法重试提交出现僵持锁的事务。

  • 保持事务的颗粒度在一个合理的处理数据量的范围之内,待处理的数据量越小,则事务处理的时间越短,则出现僵持锁的几率将大幅度地降低。

  • 及时提交事务,事务未提交的持续时间越长,则出现僵持锁的几率越大。

  • 在一些场景中,建议使用读提交的事务隔离级别。

  • 当时事务中包括很多执行语句的时候,保持每个事务的语句执行顺序都相同。

  • 每个数据表都创建索引,减少索引扫描的范围、减少设置锁的数量。

  • 使用串行化的事务隔离级别,也最安全的事务隔离级别,但是会大幅度降低性能,其使用方式如下所示,数据表t1执行写操作,数据表t2执行读操作:

  • 创建只包含一行记录的数据表,作为全局的同步表,所有语句的执行,先从全局表中获取锁,再执行语句,达到串行化的处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

防止重复下单(redis+数据库唯一索引requestId实现幂等)

文章目录为什么会重复下单如何防止重复下单利用数据库实现幂等利用Redis防重为什么会重复下单 为什么会重复下单,对于订单服务而言,就是接到了多个下单的请求,原因可能有很多,最常见的是这两种: 用户重复提交网络原因…

使用easygui制作app

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 使用easygui制作app [太阳]选择题 对于以下python代码表述错误的一项是? import easygui easygui.msgbox("我是msgbox","msgbox标题") choices["A",…

学生网页设计作业源码(HTML+CSS)——海贼王6页代码质量好

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

【Pytorch with fastai】第 13 章 :卷积神经网络

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

数据结构之线性表的顺序存储结构

配套环境 clion + g++ 顺序存储的定义 线性表的顺序存储结构,指的是用一段地址连续的存储单元一次存储线性表中的数据元素 设计思路 使用一维数组来实现顺序存储结构 存储空间:T* m_array 当前长度:int m_length 顺序存储结构的元素获取操作 判断目标位置是否合法 如…

Backblaze 2022 Q3 硬盘故障质量报告解读

在9月份,我们更新了Backblaze 2022上半年的中期质量报告解读(Backblaze2022中期SSD故障质量报告解读),基于报告中的分析数据,Backblaze也向外界传递作证了一个信息:固态硬盘SSD的长期可靠性比机械硬盘HDD要…

听说某宝抢购脚本大家都会了?那就在来个某东茅台抢购脚本吧。

前言 某宝脚本一搜能搜一大堆,就是不知道具体有没有用,但是这款某东的代码于11-17还是可用的,大家拿去白嫖吧! 需要用到的一些工具 Python版本:3.7.8相关模块:DecryptLogin模块;argparse模块&am…

webpack5 Preload / Prefetch

代码分离 | webpack 中文文档webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包裹(pa…

【云原生 | 44】Docker搭建Registry私有仓库之管理访问权限

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: rend

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/rend/ 公有成员函数 <deque> std::deque::rend C98 reverse_iterator rend(); const_reverse_iterator rend() const; C11 reverse_iterator rend() noexcept; const_reverse_iterator rend() c…

【Vue】VueX 的语法详解(3)

在VueX&#xff08;叉&#xff09;里面有一个潜移默化&#xff0c;或者说本质上的一个约束是什么&#xff1f; mutation里面只允许‍‍写同步代码&#xff0c;不允许写‍‍异步代码&#xff0c;虽然它不强制的限制你说你写了就给你报错&#xff0c;但实际上它的设计里面要求‍‍…

2022跨境出海:中东地区网红营销现状及特点

提到中东&#xff0c;大家的第一印象可能就是“头顶一块布&#xff0c;天下我最富”的土豪形象&#xff0c;近期的卡塔尔世界杯也再次给外界展示了他们的壕无人性。但由于宗教影响&#xff0c;他们的很多线下交际活动受到限制&#xff0c;也使得他们在互联网世界十分活跃&#…

申报须知,2022年滁州市各区县高新技术企业奖励政策变化,明光市

为了帮助企业提前准备和更好地开展2023年高新技术企业认定申报工作&#xff0c;安徽省大力鼓励企业申报高新技术企业&#xff0c;相应出台了相关政策&#xff0c;同时对于高企申报也有很多奖补&#xff0c;下面小编汇总了滁州市琅琊区、南谯区、天长市、明光市、来安县、全椒县…

jq扩展机制

1、在$挂上自定义函数方法&#xff1a; 如果想自定义函数方法&#xff0c;而且能通过$调用&#xff0c;那就需要用到extend&#xff08;&#xff09;方法&#xff1b;格式&#xff1a;$.extend({}) ; <script>$.extend({yiyi:function(){console.log("yiyi")}…

唯亚威VIAVI FI-60光纤识别器

光纤识别器可以轻松地识别光信号&#xff0c;而无需断开光缆或中断网络交通。也可以转换为光功率计&#xff08;OPM&#xff09;。 VIAVI FI-60 LFI能够使用户轻松检测光信号&#xff0c;而无需断开光缆或中断网络交通。FI-60 LFI还包括了独特的VIAVI SafeChekTM &#xff0c;…

特种劳动防护用品安全标志证书

特种劳动防护用品安全标志是确认特种劳动防护用品安全防护性能符合国家标准、行业标准,准许生产经营单位配发和使用该劳动防护用品的凭证。特种劳保用品是指在劳动作业生产过程中对人体起到保护作用的安全防护用品,与之对应的是普通劳保用品,如防护眼镜、劳保鞋等。常见的特种劳…

springboot入门

目录 1. 简介 2. 开发示例 2.1 创建springboot工程 3. 启动类 4. 常用注解 5. springboot配置文件 6. 开发一个controller 1. 简介 Spring Boot它本身并不提供Spring框架的核心特性以及扩展功能&#xff0c;只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。 同…

英语语法学习

文章目录第一章 a\an的用法第二章 复数代词及复数名词的用法第三章 形容词的用法第四章 一般疑问句的用法第五章 Yes\No的用法第六章 人称代词的所有格式第七章 What疑问句与专有名词第八章 Why疑问句的用法第九章 Every的用法第十章 连词Because的用法第十一章 Who疑问句的用法…

基于Java+JSP+MySQL基于SSM的智能推荐商城系统-计算机毕业设计

项目介绍 本文的主要工作是对基于B/S模式及JSP技术的基于智能推荐的b2c销售网站进行了研究与设计。本文首先介绍了基于智能推荐的b2c销售网站的背景&#xff0c;分析比较了国内外相关基于智能推荐的b2c销售网站的运行模式、系统特点与开发技术。然后分析了目前热点的各种Web应…

基于PHP+MySQL的物流配送管理系统平台

随着时代的发展,物流显得越来越重要。尤其是在网购这样的大环境冲击之下基本上物流已经充满了我们生活的每一个角落。尽管如此,但是对于那种大型的货物和车辆,仍然没有一个很好的信息共享平台。经常会出现出主找不到货源,货主找不到车源的情况。车主和货主之间形成了严重的信息…