当前位置: 首页 > article >正文

MySQL学习日记:关于MVCC及一些八股总结

MySQL事务的二阶段提交是什么二阶段提交是MySQL用来保证redo log 和binlog数据一致性的机制。redo log属于innodb存储引擎层binlog属于service层。如果写入过程中宕机就可能出两边数据不一致的问题。事务提交的流程是prepare阶段事务提交时InnoDB写把修改的数据写到redo log但状态标记为prepare。表示我已经准备好了但是还没有真正提交commit阶段redo log写完后Service层把操作写到binlog。binlog写入成功后再通知InnoDB将状态修改为commit。到此事务提交完成。redo log和binlog各自管理的是什么redo log是InnoDB自己的日志记录了数据页的物理修改。主要作用是崩溃恢复保证已提交的事务数据不丢。binlog是service层的日志。记录的是逻辑操作update/delete。作用是用于主从复制数据恢复和备份归档。两个日志各司其职redo log保证单机数据的持久性binlog保证数据能同步到从库能做到时间点恢复。MySQL中长事务可能会导致哪些问题长事务带来问题的本质是资占用时间过长影响整个系统的稳定性和性能。锁竞争严重容易引发连锁反应。事务持有行锁间隙锁的时间越长其他事务等待时间就更久。容易将连接池打爆。死锁风险增加。事务执行时间越长持有的锁越多和其他事务产生循环的概率越大。InnoDB索然有死锁检测机制但检测本身也消耗资源。Undo Log膨胀。InnoDB的MVCC机制需要保留事务开始时的数据版本长事务一直不提交这个版本链就一直不能被清理。导致磁盘空间暴涨。主从延迟。主库执行一个达十五要10分钟binlog传到从库后从库也要重放10分钟。这期间主从数据不一致从库中读取到的都是脏数据。回滚代价大。长事务一旦报错回滚之前长时间的成果都白费并且回滚本身也耗时。如何避免长事务的产生事务中不要有RPC调用或者外部IO因为他们的耗时不可控。多可能异步将发消息写日志这些可以放到事务外面。大批量数据分批提交MVCC什么是MVCC它解决了什么问题MVCC是InnoDB引擎的一种并发控制机制通过保存数据 的多个版本来管理事务之间的并发访问。它允许事务在读取数据时无需加锁而是读取数据的历史快照从而减少锁争用提高并发性能同时保证事务的隔离性。MVCC解决的问题在高并发下既要支持多事务并发操作又尽量避免了因为锁竞争而导致的性能瓶颈。MVCC的实现机制主要依赖一下机制隐藏元信息每行数据记录包含了两个隐藏字段创建版本号记录事务开始时的唯一事务ID表示数据是由哪个事务创建的删除版本号表示数据被哪个事务删除未删除是为空Undo日志修改数据时InnoDB会将旧版本数据保存到Undo日志用于回溯历史版本。事务版本号事务启动时会分配一个唯一的递增事务ID用来判断数据的可见性。MVCC支持的隔离级别读已提交每次查询时都会生成一个新的快照读取最新的已提交数。可重复读在事务开始时生成一致性视图整个事务期间看到的数据版本一致MVCC和锁的区别MVCC和锁的区别锁直接阻止其他事务对数据的访问适合频繁更新冲突较多的场景但易造成性能瓶颈MVCC通过快照读实现数据的版本控制避免加锁操作适合高并发读场景但可能带来存储和垃圾回收的开销。MVCC实现了读写分离快照读无需加锁当前都仍可加锁MVCC的优缺点优点减少锁竞争提高并发性能快照读不会阻塞其他事务支持高效读操作支持事务的隔离性缺点需要存储多个版本数据增加存储开销Undo日志产生额外的I/O和管理开销垃圾回收不及时导致性能下降1MVCC是如何与一致性视图Read View结合的在MySQL中read view是MVCC实现快照读的核心。事务在第一次执行快照读时会生成一个一致性视图。记录当前活跃事务的事务ID列表读取数据时事务会根据read view来判断那些版本的数据时可见的如何优化MVCC的使用减少长事务避免undo 日志的堆积调整pruge回收策略选择合适的隔离级别索引优化简单讲讲MySQL中的事务隔离级别由四种构成读未提交事务能看到别的事务还没提交的数据。隔离程度最低会出现脏读读已提交只能看到别的事务已经提交的数据不会出现脏读。但是同一个事务里来两次查询同一条数据结果可能不一样。可重复读事务开启时不管别的事务怎么改数据看到的数据永远是事务一开始的开罩。MySQL InnoDB默认就是可重复读级别。但是还会出现幻读问题发生在快照读与当前读混用串行化最严格的级别相当于事务一个个排队执行。彻底杜绝的所有并发问题。但是并发性能几乎没有。为什么一些大厂选择读已提交可重复读级别下innodb哟啊维护更多的undo log版本链长事务跑起来内存消耗更大可重复读的间隙锁范围更大容易造成锁等待甚至死锁业务上大多数场景其实不需要“同一事务内数据不变”这种保证代码层面处理好就行InnoDB怎么解决幻读注意并不是完全解决而是用了两招来缓解快照读走MVCC普通SELECT读的时事务开始时的快照别的事务新插入的行你看不见当前读加间隙锁 SELECT FOR UPDATE这类加锁读会锁住索引记录之间的间隙别的事务想往这给范围插入数据直接被阻塞MySQL种有哪些锁InnoDB中的锁主要可以从两个维度来区分粒度和维度粒度上分表锁行锁。表锁锁整张表行锁只锁具体的行粒度越细并发越高。模式上分共享锁S锁和排他锁X锁。S锁允许多个事务同时读X锁独占读写都不让碰。行锁又细分为三种记录行锁锁住具体那一行间隙锁锁住两条记录之间的空隙防止插入临键锁是记录锁间隙锁的组合。还有几个辅助性质的锁意向锁用来表示表里有没有行锁加表锁的时候不用遍历元数据锁MDL保护表结构DDL和DML不能同时跑插入意向锁表示事务在等着某个间隙插数据。

相关文章:

MySQL学习日记:关于MVCC及一些八股总结

MySQL事务的二阶段提交是什么 二阶段提交是MySQL用来保证redo log 和binlog数据一致性的机制。redo log属于innodb存储引擎层,binlog属于service层。如果写入过程中宕机,就可能出两边数据不一致的问题。 事务提交的流程是: prepare阶段&#…...

保姆级教程:用Python和VASP模拟金刚石结构各向异性(附代码)

从零构建金刚石结构:Python与VASP实战指南 金刚石不仅是自然界最坚硬的物质之一,其独特的晶体结构更成为凝聚态物理和计算材料学的经典研究对象。对于刚进入计算材料学领域的研究者而言,如何将教科书中的晶体结构理论转化为可执行的代码和可视…...

给工程新人的PID避坑指南:从电厂顶轴油系统图看懂阀门、仪表与管道标注

给工程新人的P&ID避坑指南:从电厂顶轴油系统图看懂阀门、仪表与管道标注 第一次面对P&ID图纸时,那种密密麻麻的符号和编号往往让人望而生畏。记得我刚入职某电力设计院时,导师扔给我一张发电机顶轴油系统的P&ID说:&qu…...

【考研】政治高分攻略:三大名师优势融合实战指南

1. 考研政治名师江湖:三足鼎立格局解析 考研政治备考就像一场没有硝烟的战争,选对老师相当于找到了最趁手的兵器。在众多政治辅导老师中,肖秀荣、徐涛和腿姐(陆寓丰)形成了稳定的"三足鼎立"格局。根据历年考…...

Mesa图形库的“翻译官”角色:以Panfrost驱动为例,看开源GPU栈如何工作

Mesa图形库的“翻译官”角色:解码开源GPU栈的协作密码 当你在Linux系统上运行一个简单的3D程序时,屏幕上的每个像素背后都隐藏着一场精密的跨层对话。这场对话的核心翻译官,正是Mesa图形库——它像一位精通多国语言的同声传译专家&#xff0c…...

DiffusionDet训练完全指南:从数据准备到模型优化

DiffusionDet训练完全指南:从数据准备到模型优化 【免费下载链接】DiffusionDet [ICCV2023 Best Paper Finalist] PyTorch implementation of DiffusionDet (https://arxiv.org/abs/2211.09788) 项目地址: https://gitcode.com/gh_mirrors/di/DiffusionDet D…...

如何快速上手 LaTeX2e:10 个实用技巧让排版变得简单

如何快速上手 LaTeX2e:10 个实用技巧让排版变得简单 【免费下载链接】latex2e The LaTeX2e kernel 项目地址: https://gitcode.com/gh_mirrors/la/latex2e LaTeX2e 是一款功能强大的文档排版系统,广泛应用于学术论文、书籍和技术文档的制作。对于…...

PyTorch遥感图像变化检测终极指南:15分钟从零搭建高精度模型

PyTorch遥感图像变化检测终极指南:15分钟从零搭建高精度模型 【免费下载链接】change_detection.pytorch Deep learning models for change detection of remote sensing images 项目地址: https://gitcode.com/gh_mirrors/ch/change_detection.pytorch 你是…...

「闭包、柯里化、响应式编程」10+ 高级编程技巧全解(多语言实战)

🚀 1. 闭包(Closure) 定义:闭包是函数与其定义时的作用域绑定在一起的结构。即使函数在外部调用,它仍然可以访问原作用域中的变量。 用途: 封装私有变量构造计数器、缓存器延迟计算 示例: JavaS…...

MQCloud消费堆积预警与处理:如何快速定位并解决消息积压问题

MQCloud消费堆积预警与处理:如何快速定位并解决消息积压问题 【免费下载链接】mqcloud RocketMQ企业级一站式服务平台 项目地址: https://gitcode.com/gh_mirrors/mq/mqcloud MQCloud作为RocketMQ企业级一站式服务平台,提供了完善的消费堆积预警与…...

终极Armbian改造指南:5个技巧将Amlogic电视盒子变身高性能Linux服务器

终极Armbian改造指南:5个技巧将Amlogic电视盒子变身高性能Linux服务器 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, …...

DiffusionDet自定义数据集训练:从零开始构建你的专属检测模型

DiffusionDet自定义数据集训练:从零开始构建你的专属检测模型 【免费下载链接】DiffusionDet [ICCV2023 Best Paper Finalist] PyTorch implementation of DiffusionDet (https://arxiv.org/abs/2211.09788) 项目地址: https://gitcode.com/gh_mirrors/di/Diffusi…...

算力狂奔下的隐忧:当AI进入“推理时代”,安全不再是防火墙后的选择题

一、数据背后的信号:从“练模型”到“用模型”的质变 2026年,中国AI产业的数据指标揭示了一个根本性转变:AI正在成为像水电一样的基础设施。 支出结构反转:行业数据显示,AI基础设施支出中,推理算力占比已…...

别再让C盘爆红了!手把手教你将Anaconda虚拟环境迁移到其他盘(附权限问题解决)

彻底解放C盘空间:Anaconda虚拟环境迁移全攻略与深度优化 当你的C盘开始频繁亮起红色警告,而Anaconda的虚拟环境占据了数十GB空间时,是时候考虑将它们迁移到其他驱动器了。这不仅是一个简单的文件移动操作,更涉及到环境配置、权限管…...

2026年站群CMS发展趋势:从AI原生到无头架构,主流方案与选型指南

2026年的站群CMS正经历一场深刻的进化,它不再是单纯的网站管理工具,而是演变为了集 AI原生能力、无头架构和低代码平台 于一体的“企业数字化基座”。这场变革的核心是从“管理内容”转向“智能运营”,主要体现在以下几个维度:核心…...

终结标签与信号:镜像视界开启空间计算时代:多视角三维定位与无感感知底座技术白皮书

前言在数字孪生、人工智能与物联网深度融合的今天,空间计算作为连接物理世界与数字世界的核心枢纽,正重构全球产业的发展范式。传统空间感知与定位技术长期受限于“标签依赖”“信号约束”,无论是GPS的室内信号衰减、蓝牙/UWB的专属设备部署要…...

PowerPaint-V1新手入门:基于Gradio的极速图像修复,听得懂人话的AI修图神器

PowerPaint-V1新手入门:基于Gradio的极速图像修复,听得懂人话的AI修图神器 1. 为什么你需要PowerPaint-V1 想象一下这个场景:你刚拍了一张完美的风景照,却发现角落里有个不想要的垃圾桶;或者你找到一张老照片&#x…...

libwebp高级特性探索:透明度、无损压缩与元数据处理

libwebp高级特性探索:透明度、无损压缩与元数据处理 【免费下载链接】libwebp Mirror only. Please do not send pull requests. See https://chromium.googlesource.com/webm/libwebp//HEAD/CONTRIBUTING.md. 项目地址: https://gitcode.com/gh_mirrors/li/libwe…...

你的稳压电路为什么总烧管子?深入解析稳压二极管电路中的三个常见设计误区

稳压电路设计三大致命误区:为什么你的稳压管总是莫名烧毁? 深夜的实验室里,工程师小王盯着第5个烧毁的1N4742稳压管,焦黑的元件散发出淡淡的焦糊味。他反复检查电路连接,确认所有参数都"符合教科书要求"&…...

不只是滤波:用GEE处理Sentinel-1 SAR数据时,VV和VH波段到底该怎么选?

VV与VH波段选择指南:Sentinel-1 SAR数据在不同地物监测中的实战策略 当你在Google Earth Engine中加载Sentinel-1 SAR数据时,VV和VH这两个极化波段的选择往往让人举棋不定。这不是简单的二选一问题,而是需要深入理解雷达波与不同地表特征的交…...

ALLWEONE Plate编辑器集成教程:打造专业文本编辑体验

ALLWEONE Plate编辑器集成教程:打造专业文本编辑体验 【免费下载链接】presentation-ai ALLWEONE Open source AI presentation generator Gamma Alternative. Create professional slides with customizable themes and AI-generated content in minutes. 项目地…...

libwebp性能优化秘籍:10个技巧让你的WebP图片加载更快

libwebp性能优化秘籍:10个技巧让你的WebP图片加载更快 【免费下载链接】libwebp Mirror only. Please do not send pull requests. See https://chromium.googlesource.com/webm/libwebp//HEAD/CONTRIBUTING.md. 项目地址: https://gitcode.com/gh_mirrors/li/lib…...

从手机到智能锁:聊聊电容触摸FPC设计中,自电容与互电容到底怎么选?

从手机到智能锁:电容触摸FPC设计中自电容与互电容的选型策略 在智能硬件产品爆炸式增长的今天,电容式触摸技术已经从智能手机扩展到智能门锁、蓝牙音箱、家电控制面板等各类设备。作为产品经理或硬件开发者,面对自电容与互电容两种主流方案时…...

别再只用view了!用movable-area和movable-view给你的小程序加点‘拖拽’魔法(附完整代码)

解锁小程序拖拽交互:movable-area与movable-view实战指南 在移动应用设计中,流畅自然的拖拽交互往往能大幅提升用户体验。想象一下,当用户能够用手指轻松拖动界面元素时,那种直观的操作感受会让人爱不释手。微信小程序提供的movab…...

如何将libwebp集成到你的项目中:C、Python、Java多语言绑定

如何将libwebp集成到你的项目中:C、Python、Java多语言绑定 【免费下载链接】libwebp Mirror only. Please do not send pull requests. See https://chromium.googlesource.com/webm/libwebp//HEAD/CONTRIBUTING.md. 项目地址: https://gitcode.com/gh_mirrors/l…...

QuantEcon.py入门指南:10分钟掌握经济学计算利器

QuantEcon.py入门指南:10分钟掌握经济学计算利器 【免费下载链接】QuantEcon.py A community based Python library for quantitative economics 项目地址: https://gitcode.com/gh_mirrors/qu/QuantEcon.py QuantEcon.py是一个基于社区的Python定量经济学库…...

STM32CubeIDE HAL库实战:搞定W25Q128跨页跨扇区写入的坑(附完整代码)

STM32CubeIDE HAL库实战:W25Q128跨页跨扇区写入的终极解决方案 在嵌入式存储应用中,W25Q128这颗16MB的SPI Flash芯片因其高性价比被广泛使用。但当开发者尝试实现跨页或跨扇区写入时,往往会遇到数据丢失或写入失败的问题。本文将深入剖析这些…...

等价类划分测试方法

有效等价类划分测试 有效等价类划分(Valid Equivalence Class Partitioning) 是软件测试中黑盒测试的一种常用方法。 它的核心思想是:把输入数据划分成若干类,认为同一类中的数据对程序行为是等价的,只需选一个代表值进…...

暗黑2重制版终极自动化脚本Botty:5步配置实现24小时高效MF

暗黑2重制版终极自动化脚本Botty:5步配置实现24小时高效MF 【免费下载链接】botty D2R Pixel Bot 项目地址: https://gitcode.com/gh_mirrors/bo/botty 还在为重复刷怪感到枯燥乏味吗?Botty作为专业的暗黑2重制版像素级自动化脚本,能够…...

gh_mirrors/se/search源码架构分析:从自定义属性到布局渲染

gh_mirrors/se/search源码架构分析:从自定义属性到布局渲染 【免费下载链接】search Material You Search component for Android, SearchView 项目地址: https://gitcode.com/gh_mirrors/se/search gh_mirrors/se/search是一个专为Android平台设计的Materia…...