mysql常见死锁的分析
概念:
死锁是指两个或多个事务在数据库操作过程中相互等待对方释放资源,而导致无法继续执行的现象。在 MySQL 中,死锁是较为常见的问题,特别是在高并发环境中。
一、识别死锁
当 MySQL 检测到死锁时,会自动中止其中一个事务,并回滚该事务,以便其他事务能够继续执行。MySQL 还会在错误日志中记录死锁信息。举例:
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
二、分析死锁原因
要了解是什么导致了死锁,可以通过以下方法分析死锁原因:
1. 使用 SHOW ENGINE INNODB STATUS 查看死锁信息
SHOW ENGINE INNODB STATUS;
执行上述命令后,查找输出中的 LATEST DETECTED DEADLOCK 部分。这部分会详细描述死锁相关的信息,包括哪个事务被中止、涉及的表和锁等。
2. 分析死锁日志
获取死锁信息后,应仔细分析涉及的表、行和事务,找出死锁产生的根本原因。通常,死锁是由于事务相互持有锁,并且都在等待对方释放锁。
三、解决死锁的方法
1. 避免长事务
尽可能减少事务的持续时间,避免在事务中进行用户交互操作。长事务更容易导致锁的竞争,从而引发死锁。
-- 确保在一个事务中完成所有操作,减少等待时间
START TRANSACTION;
-- 更新或插入操作
COMMIT;
2. 以固定顺序访问资源
确保所有事务以相同的顺序访问表和记录,可以显著减少死锁的概率。例如,如果多个事务需要访问同一组表,确保它们总是以相同的顺序进行访问。
-- 假设有两个表 table1 和 table2
-- 保持所有事务总是先访问 table1,然后访问 table2START TRANSACTION;
UPDATE table1 SET ... WHERE ...;
UPDATE table2 SET ... WHERE ...;
COMMIT;
3. 使用低隔离级别
在许多情况下,降低事务的隔离级别可以减小死锁的概率。例如,将隔离级别从 SERIALIZABLE 降到 READ COMMITTED 或 READ UNCOMMITTED。请注意,这可能会影响数据的一致性,需要谨慎使用。
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
-- 操作
COMMIT;
4. 捕获并重试事务
在应用程序级别,该方法包括捕获死锁错误代码(1213),并在一段时间后重试失败的事务。大多数情况下,重试事务可以成功执行。
import mysql.connector
import timeconfig = {'user': 'your_username','password': 'your_password','host': 'localhost','database': 'your_database',
}def execute_transaction():try:conn = mysql.connector.connect(**config)conn.start_transaction()cursor = conn.cursor()# 执行SQL操作cursor.execute("UPDATE table1 SET column1 = %s WHERE column2 = %s", (value1, value2))conn.commit()except mysql.connector.Error as e:if e.errno == 1213: # 死锁错误代码print("Deadlock occurred, retrying transaction")time.sleep(1) # 延迟一秒后重试execute_transaction()else:print(f"Error occurred: {e}")conn.rollback()finally:cursor.close()conn.close()execute_transaction()
5. 索引优化
确保相关列上有适当的索引,可以减少锁的范围,从而减少死锁的概率。优化查询,提高查询效率,防止表扫描。
-- 创建索引
CREATE INDEX idx_column1 ON table1(column1);
6. 行级锁和间隙锁
尽量避免使用间隙锁(Next-Key Locks),可以通过适当的索引、查询条件和范围查询来减少间隙锁的使用。尽量使用行级锁。
-- 适当的索引可以限制锁的范围
SELECT * FROM employees WHERE employee_id = 123 FOR UPDATE;
四、总结
死锁是数据库中复杂的并发控制问题之一,但通过适当的方法可以减少甚至避免死锁的发生:
- 缩短事务执行时间,避免长事务。
- 遵循一致的资源访问顺序。
- 合理设置事务的隔离级别。
- 在应用程序中捕获并重试死锁事务。
- 通过索引优化查询,减少锁的争用范围。
理解死锁的产生原因并采取相应措施,可以显著提高数据库的可靠性和性能。
相关文章:
mysql常见死锁的分析
概念: 死锁是指两个或多个事务在数据库操作过程中相互等待对方释放资源,而导致无法继续执行的现象。在 MySQL 中,死锁是较为常见的问题,特别是在高并发环境中。 一、识别死锁 当 MySQL 检测到死锁时,会自动中止其中一个事务&am…...
Go Energy 跨平台(GUI)应用编译和安装包制作
构建打包 energy cli 平台介绍描述windowNSIS安装包制作工具可通过 energy cli 安装linuxdpkg 命令系统自带macosenergy 仅生成 xxx.app系统自带 安装包制作 config/energy_[os].json是初始化应用时自动生成的应用配置文件,在编译和制作应用安装包时使用 Windows…...
众测遇到的一些案列漏洞
文章中涉及的敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打码处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行…...
大华乐橙设备私有平台EasyCVR视频设备轨迹回放平台支持哪些摄像机?摄像机如何选型?
在现代安全监控系统中,视频监控设备扮演着至关重要的角色。视频设备轨迹回放平台EasyCVR以其卓越的兼容性和灵活性,支持接入多种品牌和类型的摄像机。这不仅为用户提供了广泛的选择空间,也使得视频监控系统的构建和管理变得更加高效和便捷。本…...
实战攻略 | ClickHouse优化之FINAL查询加速
【本文作者:擎创科技资深研发 禹鼎侯】 查询时为什么要加FINAL 我们在使用ClickHouse存储数据时,通常会有一些去重的需求,这时候我们可以使用ReplacingMergeTree引擎。这个引擎允许你存储重复数据,但是在merge的时候会根据order …...
5G NR gNB 逻辑架构及其功能拆分选项
5G NR gNB 逻辑架构及其功能拆分选项 中央单元 (CU) 和分布式单元功能拆分选项RAN 分体架构的优势在哪里使用哪个拆分函数?参考: 5G NR gNB Logical Architecture and It’s Functional Split OptionsCentral Unit (CU) and Distributed Unit Functional…...
PyQt入门指南四十六 性能优化策略
在PyQt应用程序中,性能优化是一个重要的考虑因素,尤其是在处理大型数据集或复杂图形界面时。以下是一些常见的性能优化策略: 1. 使用延迟加载(Lazy Loading) 延迟加载是一种优化技术,只在需要时加载资源。…...
【RMA】基于知识注入和模糊学习的多模态歧义分析
abstract 多模态情感分析(MSA)利用互补的多模态特征来预测情感极性,主要涉及语言、视觉和音频三种模态。现有的多模态融合方法主要考虑不同模态的互补性,而忽略了模态之间的冲突所导致的歧义(即文本模态预测积极情绪&…...
CulturalBench :一个旨在评估大型语言模型在全球不同文化背景下知识掌握情况的基准测试数据集
2024-10-04,为了提升大型语言模型在不同文化背景下的实用性,华盛顿大学、艾伦人工智能研究所等机构联合创建了CulturalBench。这个数据集包含1,227个由人类编写和验证的问题,覆盖了包括被边缘化地区在内的45个全球区域。CulturalBench的推出&…...
Git 入门篇(一)
前言 操作系统:win11 64位 与gitee搭配使用 Git 入门篇(一) Git 入门篇(二) Git 入门篇(三) 目录 git下载、安装与配置 下载 安装 配置 git下载、安装与配置 下载 官网:git-…...
一个灵活且功能强大的动画库 Popmotion
一个灵活且功能强大的动画库 Popmotion 什么是 Popmotion? Popmotion 是一个强大的 JavaScript 动画库,提供了一系列简洁的 API,方便开发者创建流畅的动画效果。它支持不同类型的动画,包括 CSS 动画、SVG 动画和 DOM 动画&#…...
如何解决传统能源企业后备人才不足、人才规划缺失问题
如何解决传统能源企业后备人才不足、人才规划缺失问题 很多传统能源企业都面临着老员工逐渐退休,新员工还没有培养起来的问题,缺乏提前对人力资源规划的意识,导致当企业要开展新业务时或者老员工离职的时候,缺乏合适的人选。特别…...
PDF模板制作与填充(Java)
1.PDF模板制作 准备原始模板 准备一个原始PDF模板,可以编辑好Word,预留出要填充的部分,再转换成PDF格式。 设置表单域 用任意PDF编辑器打开PDF模板文件,设置表单域,下面以WPS为例: 拖动文本域到需要填充的…...
LeetCode题练习与总结:迷你语法分析器--385
一、题目描述 给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger 。 列表中的每个元素只可能是整数或整数嵌套列表 示例 1: 输入:s "324", 输出:324 解释ÿ…...
Unity WebGL交互通信
Unity 调用 H5 本文使用的 unity 版本为:2021.3.3 1.在unity中通过c#的特性DllImport导出外部实现函数 [DllImport("__Internal")]private static extern void callJsString(string param);[DllImport("__Internal")]private static extern vo…...
王道考研之数据结构
数据结构系列 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 数据结构 数据结构系列1.线性表1.1 线性表的定义和相关概念1.2 线性表的创销 增删查改 判空表长打印 2.顺序表2.1 顺序表定义和相关概念2.2 顺序表的静态实现2.3 顺序表的…...
实习冲刺Day17
算法题 x的平方根 69. x 的平方根 - 力扣(LeetCode) class Solution { public:int mySqrt(int x) {long left 0,right x;//定义左右边界//数值取的大longlong类型while (left < right) {long mid (right-left1)/2left;//定义中间节点if ((mid *…...
我自己nodejs练手时常用的一些库基础用法
我自己在使用nodejs以及前端实战练习时常用的一些库的基本使用 1.bcrypt //注册账号时,给密码加密 password是前端传过来的密码,hashPassword是存到数据库中的密码 const bcrypt require(bcrypt) const hashPassword bcrypt.hash(password,10) //登…...
岛屿数量问题
给一个0 1矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。 岛屿问题: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。 C 解决方案 #include &…...
智能制造基础- TPM(全面生产维护)
TPM 前言一、TPM二、TPM实施步骤三、 消除主要问题3.1 实施指南3.2 如何进行“主要问题”的消除? 四、自主维护4.1 实施指南4.2 主要工作内容4.3 如何进行“自主维护“ 五、计划维护5.1 实施指南5.2 如何实施计划维护 六、TPM 适当的 设备 设计5.1 实施指南5.2 如何…...
终极指南:Redaxios参数序列化完全掌握,自定义查询字符串生成逻辑如此简单
终极指南:Redaxios参数序列化完全掌握,自定义查询字符串生成逻辑如此简单 【免费下载链接】redaxios The Axios API, as an 800 byte Fetch wrapper. 项目地址: https://gitcode.com/gh_mirrors/re/redaxios Redaxios是一个轻量级的Fetch封装库&a…...
Qwen3-TTS快速部署教程:一键启动Web服务,3分钟开始声音克隆
Qwen3-TTS快速部署教程:一键启动Web服务,3分钟开始声音克隆 1. 为什么选择Qwen3-TTS进行语音克隆 想象一下这样的场景:你需要为海外客户录制多语言产品介绍,但雇佣专业配音演员成本高昂;或者想为自己的视频内容添加个…...
保姆级教程:在Windows系统本地部署Qwen3-14B-Int4-AWQ对话模型
保姆级教程:在Windows系统本地部署Qwen3-14B-Int4-AWQ对话模型 1. 前言:为什么选择本地部署? 在个人电脑上运行大语言模型听起来可能有些遥不可及,但随着模型量化技术的进步,现在即使是消费级显卡也能流畅运行14B参数…...
Gemma-3 Pixel Studio一文详解:Flash Attention 2对图文响应速度提升实测
Gemma-3 Pixel Studio一文详解:Flash Attention 2对图文响应速度提升实测 1. 引言 在当今多模态AI应用快速发展的背景下,Gemma-3 Pixel Studio作为一款基于Google最新开源Gemma-3-12b-it模型构建的高性能对话终端,凭借其卓越的视觉理解能力…...
颠覆中文字体困境:思源宋体CN 7字重开源方案深度解析
颠覆中文字体困境:思源宋体CN 7字重开源方案深度解析 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 价值主张:破解中文字体的"三重枷锁" 在数字设计…...
Kandinsky-5.0-I2V-Lite-5s效果展示:建筑图纸→镜头平移漫游视频生成案例
Kandinsky-5.0-I2V-Lite-5s效果展示:建筑图纸→镜头平移漫游视频生成案例 1. 惊艳效果预览 Kandinsky-5.0-I2V-Lite-5s带来的建筑漫游视频生成效果令人印象深刻。想象一下,你有一张静态的建筑设计图纸,通过这个模型,只需简单描述…...
弦音墨影保姆级教程:解决‘视频加载失败’‘墨迹不跟随目标’等10类高频问题
弦音墨影保姆级教程:解决‘视频加载失败’‘墨迹不跟随目标’等10类高频问题 1. 系统简介与核心价值 「弦音墨影」是一款将人工智能技术与传统美学完美融合的视频分析工具。它采用水墨丹青的视觉风格,通过先进的Qwen2.5-VL多模态技术,让视频…...
精通ComfyUI-BrushNet:专业图像修复全流程指南
精通ComfyUI-BrushNet:专业图像修复全流程指南 【免费下载链接】ComfyUI-BrushNet ComfyUI BrushNet nodes 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-BrushNet ComfyUI-BrushNet是一款功能强大的图像修复工具,通过节点式工作流实现专…...
嵌入式系统中SipHash轻量级哈希实现与优化
1. SipHash 嵌入式底层实现技术解析SipHash 是一种基于加法-循环-异或(Add-Rotate-Xor, ARX)结构的伪随机函数族,专为短输入消息设计,在嵌入式系统中广泛用于哈希表键值保护、拒绝服务(DoS)防护、安全计数器…...
CA6140车床拨叉831003加工工艺及铣左端面夹具设计【说明书+CAD图纸+SW三维】
CA6140车床拨叉831003作为机床传动系统中的关键零件,其加工质量直接影响设备运行的稳定性。该零件的加工工艺需兼顾尺寸精度与表面粗糙度要求,重点在于左端面的铣削加工。传统工艺方案多采用通用夹具定位,存在装夹效率低、重复定位精度差等问…...
