完整教程:MySQL并发问题解析

news/2025/9/19 15:03:17/文章来源:https://www.cnblogs.com/tlnshuju/p/19100906

完整教程:MySQL并发问题解析

2025-09-19 15:02  tlnshuju  阅读(0)  评论(0)    收藏  举报

MySQL作为最流行的关系型数据库之一,其并发性能直接影响着整个应用的稳定性和效率。然而,并发访问不可避免地会带来一系列问题,如脏读、不可重复读、幻读以及死锁等。

一、MySQL并发带来的问题

1. 脏读

定义:一个事务读取了另一个未提交事务的数据。

场景示例

  1. 事务A修改了某条记录但尚未提交。
  2. 事务B读取了这条被修改的记录。
  3. 事务A回滚,数据恢复原状。
  4. “脏”的,从未真正存在过。就是事务B读到的信息

2. 不可重复读

定义:在同一事务中,多次读取同一信息返回的结果不一致。

场景示例

  1. 事务A第一次读取某条记录。
  2. 事务B修改了该记录并提交。
  3. 事务A再次读取同一条记录,发现材料已变。

3. 幻读

定义:一个事务在执行过程中,前后两次查询同一范围的数据,但结果集不一致。

场景示例

  1. 事务A查询年龄大于20的用户有10条。
  2. 事务B插入了一条年龄为25的新用户并提交。
  3. 事务A再次查询,发现结果变为11条。

4. 丢失更新

定义:两个事务同时读取同一素材并修改,后提交的事务覆盖了前一个事务的修改。

场景示例

  1. 事务A和B同时读取账户余额为100。
  2. A执行+50,B执行-30。
  3. 若B后提交,最终余额为70,A的+50操作被覆盖。

5. 死锁

定义:两个或多个事务相互等待对方释放锁,导致所有事务都无法继续执行。

场景示例

  1. 事务A持有表1的锁,请求表2的锁。
  2. 事务B持有表2的锁,请求表1的锁。
  3. 双方陷入无限等待。

二、MySQL的隔离级别与并发控制

MySQL通过事务隔离级别来控制并发行为,不同级别给予不同的数据一致性保证。

隔离级别脏读不可重复读幻读
读未提交(READ UNCOMMITTED)
读已提交(READ COMMITTED)×
可重复读(REPEATABLE READ)×××
串行化(SERIALIZABLE)×××

三、并发挑战的解决方案

1. 合理使用事务隔离级别

  • 高一致性要求:使用 SERIALIZABLE,但性能开销大。
  • 平衡选择REPEATABLE READ 是InnoDB默认级别,能有效防止脏读、不可重复读和幻读。
  • 高并发读场景READ COMMITTED 适用于读多写少、可容忍轻微不一致的场景。

2. 显式加锁控制

共享锁(S锁)与排他锁(X锁)
-- 共享锁:允许其他事务读,但不能写
SELECT * FROM users WHERE id = 1 LOCK IN SHARE MODE;
-- 排他锁:不允许其他事务读写
SELECT * FROM users WHERE id = 1 FOR UPDATE;
乐观锁 vs 悲观锁

悲观锁:假设冲突频繁,提前加锁。

乐观锁:假设冲突少,通过版本号或时间戳控制。

3. 避免死锁的策略

按固定顺序访问资源:所有事务以相同顺序访问表和行。

减少事务持有锁的时间:尽快提交事务。

使用索引:避免全表扫描,减少锁的范围。

设置超时innodb_lock_wait_timeout 控制等待时间。

死锁检测:MySQL自动检测并回滚代价较小的事务。

4. 采用连接池优化

高并发下频繁创建/销毁连接消耗资源。使用连接池(如HikariCP、Druid)复用连接,提升性能。

5. 分库分表与读写分离

读写分离:主库写,从库读,减轻主库压力。

分库分表:将大表拆分为多个小表,分散并发压力。

6. 使用缓存层

在应用与数据库之间加入缓存(如Redis),减少直接访问数据库的频率,尤其适用于热点资料。

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

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

相关文章

面向多模态检索的向量数据库对比分析和技术选型:Elasticsearch、Milvus、Pinecone、FAISS、Chroma、PGVector、Weaviate、Qdrant

目录1.向量数据库1.1 Elasticsearch 1.2 Milvus 1.3 Pinecone 1.4 FAISS 1.5 Chroma 1.6 PGVector 1.7 Weaviate 1.8 Qdrant2.向量数据库对比分析 3.多模态大规模图文检索选型3.1需求分析 3.2推荐方案 3.3实施建议 1.…

SI/PI学习笔记1 -20250911

SI/PI学习笔记1 -20250911作为硬件测试工程师,随着信号传输速度的迭代升级,分析信号和电源完整性将成为一个必然的趋势。SI全称为Signal Integrity 信号完整性,PI全称为Power Integrity 电源完整性。 从测试方面来…

Web开发工具一套式部署Maven/Nvm/Mysql/Redis - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

单词翻转

点击查看代码 #include<iostream> #include<cstring> using namespace std; int main() {char s[105];gets_s(s);int len = strlen(s);s[len] = \0;char d[105];d[len] = \0;for (int i = 0; i < len; …

详细介绍:kafka如何保证消息不被重复消费

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

终结AI幻觉:Amazon Bedrock如何用形式化方法重塑可信AI

AI幻觉(Hallucination)是高价值企业级AI应用落地的核心壁垒。本文从技术视角深入剖析了RAG架构中幻觉的多重根源,指出传统概率性缓解方案的局限性。进而,重点解析了**亚马逊云科技(Amazon Web Services)** 在其全…

技术解读 | OceanBase 数据库诊断与调优的关键技术与方法

技术解读 | OceanBase 数据库诊断与调优的关键技术与方法最高明的诊断调优,是让风险消弭于无形。本文聚焦于体系化的诊断调优方法论,旨在通过结构化流程与关键技术,帮助开发者建立"数据驱动、工具赋能"的…

我代表编程导航,向大家道歉!

大家最近访问我们网站可能会遇到很多莫名其妙的 Bug。这是因为最近我们网站前端正在进行技术升级,为了保险起见,我们选择 灰度发布,结果翻车了。对不起,我代表编程导航,向大家道歉! 大家最近访问网站可能会遇到…

cf div2 1051 E(视角转换,构造+思维)

E 一道简约清新的构造题,感觉这种构造题真的很难得。 回顾题意:给定一个括号串,每次可以翻转两个相邻的相同括号,任意次,问能否将原序列变成一个 \(RBS\),并给出构造方案。 直接按原操作的角度来想是很困难的。这…

从“被动监控”到“主动优化”:MyEMS 重构能源管理价值的路径

长期以来,能源管理对于许多企业和园区而言,更像是一个“事后诸葛亮”式的成本中心。其工作重心往往停留在安装电表、记录数据、生成月度报表的初级阶段,这是一种典型的被动监控模式。它虽然能告诉我们“用了多少能”…

openHarmony之开源三方库zlib适配讲解 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

phoenix 导出sql执行结果到文件中

怎么使用phoenix服务安装包自带的sqlline.py文件,执行sql语句,并将结果导出到本地文件。连接phoenix ./sqlline.py zkmaster:2181执行导出逻辑 # 可以省略或设置为默认的table格式 !outputformat table # 输出的结果…

LK32V12A 过压/过流保护开关芯片 OVP过压45V 过流2.2A电流 SOT-23L

LK32V12A 过压/过流保护开关芯片 OVP过压45V 过流2.2A电流 SOT-23L概述 LK32V12A是一款过压/过流保护开关芯片, 该芯片内置高耐压功率MOSFET,芯片对输入 电压和输出电流以持续监测,当芯片监测到 输入电压或输出电流…

为什么企业需要高防IP - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

论文解读-《Graph Retrieval-Augmented Generation A Survey》 - zhang

1. 论文介绍 论文题目:Graph Retrieval-Augmented Generation: A Survey 论文领域:RAG 论文发布:2024.08 发布于Arxiv 论文代码:https://github.com/pengboci/GraphRAG-Survey 论文背景:2. 论文摘要 近年来,检索…

AI编程问题处理与传统网页搜索对比分析

AI编程问题处理与传统网页搜索对比分析引言 随着人工智能技术的快速发展,AI编程助手已经成为开发者解决编程问题的重要工具。相比传统的网页搜索方式,AI编程助手在问题处理方面展现出了独特的优势,但同时也存在一些…

深入解析:HTML元素周期表

深入解析:HTML元素周期表2025-09-19 14:34 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

APP 内测分发的核心逻辑与流程,虾分发让效率翻倍

对于开发者而言,APP 内测分发不是简单的 “传安装包”,而是连接 “产品开发” 与 “正式上线” 的关键环节 —— 既要通过真实用户测试暴露问题,又要兼顾效率、安全与合规。但传统分发常陷 “用户安装复杂”“反馈收…

WPF Canvas 网格线背景样式

该代码片段是 WPF 中 UserControl 的资源定义,核心功能是为 Canvas 控件创建带虚线网格线的背景样式,通过自定义 DrawingBrush 实现重复排列的网格效果,具体说明如下: 一、样式基础信息目标控件:Canvas(画布控件…

深入解析:【vue+exceljs+file-saver】纯前端:下载excel和上传解析excel

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …