MySql事务原理与优化建议

MySql事务原理与优化建议

  • 前言
  • 一、事务的定义
  • 二、事务的ACID特性
  • 三、事务的隔离性
  • 四、读写锁
  • 五、MVCC机制
  • 六、事务提交的流程
  • 七、大事务的影响
  • 八、事务优化建议
  • 总结


前言

最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。

如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!

一、事务的定义

  • 事务:就是一组操作要么全部成功,要么全部失败回滚,目的就是为了保证数据的一致性。

二、事务的ACID特性

  • 1、原子性(Atomicity):当前事务的操作要么全部成功,要么全部同时失败。
    • 它是由undo log日志来实现。
  • 2、一致性(Consistency):事务前后的数据是一致的。
    • 它是由其他三个特性来保证的。
  • 3、隔离性(Isolation):事务之间互相不影响。
    • 它是由mysql的各种锁以及,MCCC机制来实现的。
  • 4、永久性(Durability):事务一旦提交成功,对数据的修改就是永久性的。
    • 它是由redo log 来实现的。

三、事务的隔离性

  • 在mysql中的InnoDB引擎中,定义了四种隔离级别,隔离级别越高,性能越差。
    • 1、read uncommit(读未提交):会产生脏读
    • 2、read commit(读已提交):不可重复读
    • 3、repeatable read(可重复读):会产生幻读
    • 4、serializable(串行读):性能最差

四、读写锁

  • 读锁(共享锁、S锁):select …lock in share mode;

读锁是共享的,多个事务可以同时读取同一个资源,但不允许其他事务修改。

  • 写锁(独占锁、X锁):select …for update;

写锁是排他的,会阻塞其他的写锁或读锁,insert 、delete、update都会加写锁。

五、MVCC机制

  • MVCC(multi-version Concurrency Control)多版本并发控制,可以做到读写不阻塞,避免了类似脏读这样的问题,主要通过undo日志链来实现。
    • select操作是快照读(历史版本)
    • insert、delete和update是当前读(当前版本)
    • read commit(读已提交),语句级快照
    • repeatable rea(可重复读),事务级快照

六、事务提交的流程

  • 1、client执行一条SQL,会经过连接器(管理连接和权限校验),分析器(词法语法分析),优化器(执行计划生成索引选择),执行器(调用引擎接口);
  • 2、从磁盘中加载复合条件的数据到内存中(Buffer pool),数据库的增删改查都是直接操作Buffer pool的;
  • 3、写入更新数据的旧值到undo log中,如果事务失败回滚,需要用到undo log日志里的数据恢复Buffer pool里的缓存数据;
  • 4、更新Buffer pool里的数据,同时记录redo log日志顺序写入到磁盘,此时还是处于prepare状态;
  • 5、准备提交事务,记录bin log 日志写入到磁盘,主要是用来恢复数据库磁盘的数据;
  • 6、提交事务,同时把redo log日志的标记改为commit状态;
  • 7、操作系统会把Buffer pool中的数据,以page为单位写入到磁盘中。
    如果事务提交成功,Buffer pool里的数据还没来得及写入到磁盘,系统宕机了,可以用redo log日志里的数据来恢复磁盘ibd文件里的数据。

七、大事务的影响

  • 并发情况下,数据库连接池容易撑爆;
  • 锁定太多的数据,造成大量的阻塞和锁超时;
  • 执行时间长,容易造成主从延迟;
  • 回滚所需要的时间比较长;
  • 容易导致死锁。

八、事务优化建议

  • 将查询等数据准备操作放到事务外;
  • 事务中避免远程调用,远程调用要设置超时,防止事务等待时间过久;
  • 事务中避免一次性处理太多的数据,可以拆分成多个事务分次处理;
  • 封信等设计加锁的操作尽可能放在事务靠后的为准;
  • 能异步处理的尽量异步处理。

总结

都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!

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

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

相关文章

运用YOLOv5实时监测并预警行人社交距离违规情况

YOLO(You Only Look Once)作为一种先进的实时物体检测算法,在全球范围内因其高效的实时性能和较高的检测精度受到广泛关注。近年来,随着新冠疫情对社交距离管控的重要性日益凸显,研究人员开始将YOLO算法应用于社交距离…

python知识点总结(七)

python知识点总结七 1、堆和栈的区别2、如何在局部修改全局的变量a、计算结果b、计算结果 3、如何修改一个enclosing变量4、关于值传递还是地址传值5、布尔类型6、逻辑运算7、字符串切片操作8、取整、取余、除数9、变量赋值10、字符串与数字相乘11、整型、浮点型、字符型之间相…

List系列集合:ArrayList、LinkedList --java学习笔记

List系列集合 特点:有序、可重复、有索引 ArrayList:有序、可重复、有索引LinkedList:有序、可重复、有索引 List集合的特有方法 List集合因为支持索引,所以多了很多与索引相关的方法,当然,Collection的…

CentOS7 安装和使用Docker

文章目录 前言一、Docker的主要优势二、安装前必读三、安装Docker的详细步骤1. 安装需要的软件包2. 设置仓库3. 安装Docker方式一 使用官方安装脚本自动安装方式二 选择版本并安装4. Docker运行操作4.1 启动4.2 关闭4.3 运行状态4.4 开机自启四、在没有Sudo的情况下执行Docker命…

软件工程(双语)

教材《软件工程 实践者的研究方法》 双语教学,但目前感觉都是在讲没用的 ”过程决定质量,复用决定效率” 介绍 软工的本质 程序数据结构算法 软件程序文档(需求、模型、说明书) 软件应用: 系统软件 应用 工程/科学…

Spring Cloud Gateway 中GET请求能正常访问,POST请求出现Unable to handle DataBuffer

报错信息如下: java.lang.IllegalArgumentException: Unable to handle DataBuffer of type class org.springframework.http.server.reactive.UndertowServerHttpRequest$UndertowDataBufferat org.springframework.cloud.gateway.filter.NettyRoutingFilter.getB…

代码随想录笔记|C++数据结构与算法学习笔记-字符串(二)|28. 实现 strStr()、459.重复的子字符串、KMP算法

文章目录 卡码网.右旋字符串28. 实现 strStr()KMP算法(理论)KMP算法(代码)C代码 459.重复的子字符串暴力解法移动匹配KMP解法 卡码网.右旋字符串 卡码网题目链接 略 28. 实现 strStr() 力扣题目链接 文字链接:28. 实现 strStr() 视频链接:帮你把KMP算法…

JAVA刷题 字符操作串各种方法总结(随时更新)

写在前面 JAVA万能头: import java.io.*; import java.util.*;JAVA字符串方法参数操作 谨记【左闭右开】原则 一、substring()方法 两个参数: 字符串.substring(参数1,参数2); 参数1:字符串截取的起始下标,非负的整…

CentOS yum安装MongoDB的详细教程

一、准备工作 打开终端或SSH会话,并使用root或具有管理员权限的用户登录到CentOS服务器。 二、添加MongoDB的源 执行以下命令添加MongoDB的存储库 sudo vi /etc/yum.repos.d/mongodb-org.repo 在编辑器中,复制并粘贴以下内容 [mongodb-org-6.0] name…

什么是UI设计?适合做UI设计的软件有哪些?

人们常说 UI 和 UI 设计,但到底什么是 UI 设计?UI 设计的原则是什么?实际上 “UI" 也就是 User Interface,它是用户界面的缩写。一般指用户操作界面,即软件程序、网站或设备的图形部分,用户与之互动。…

GEE学习——初学者如何下载指定区域的Sentinel-2影像

简介 初学者如何下载指定区域的Sentinel-2影像? 初学者可以按照以下步骤利用Google Earth Engine(GEE)下载指定区域的Sentinel-2影像: 登录GEE账号并打开代码编辑器。代码编辑器位于GEE主页左上角的"Code Editor"按钮。 在代码编辑器中,点击左上角的"App…

自定义高亮文字的textview,匹配关键字词高亮,匹配可拆分的字词高亮

自定义高亮文字的textview,匹配关键字词高亮,匹配可拆分的字词高亮 import android.graphics.Color; import android.text.SpannableString; import android.text.Spanned; import android.text.style.ForegroundColorSpan;import java.util.regex.Match…

MyBatis3源码深度解析(十九)MyBatis日志实现

文章目录 前言第七章 MyBatis日志实现7.1 Java日志体系7.1.1 常用日志框架7.1.2 Java日志发展史7.1.3 日志接口与日志实现的绑定 7.2 MyBatis日志实现7.2.1 Log接口7.2.2 LogFactory工厂7.2.3 MyBatis日志自动查找7.2.4 MyBatis日志类型配置 7.3 小结 前言 日志是Java应用中必…

蓝桥算法练习系统—卡勒沃夫之弱水路三千(提高型)(拓扑排序)

问题描述 锦瑟年华谁与度 莫问情归处 只影向斜阳 剑吼西风 欲把春留驻   天涯芳草无归路 回首花无数 解语自销魂 弱袂萦春 尘缘不相误   ......   在卡勒沃夫充满文学杀伤力的声音中,身处紫荆2号楼202B的四位远近高低各不同的室友纷纷回忆起了各自波澜起伏的过…

【合合TextIn】深度解析智能文档处理技术与应用

目录 一、智能文档处理介绍 二、文档格式解析 三、图像增强技术解析 四、传统文字识别OCR技术解析 五、深度学习OCR技术解析 六、深度学习版面分析技术解析 七、文档分类 八、信息抽取 九、系统集成:将IDP处理后的数据集成到企业系统 结论 一、智能文档处…

机器学习-06-无监督算法-01-划分聚类Kmeans算法

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中无监督算法,包括划分聚类等。 参考 数据分析实战 | K-means算法——蛋白质消费特征分析 欧洲48国英文名称的来龙去脉及其国旗动画 Kmeans在线动态演示 本门课程的目标 完成一个特定行业的…

如何与手机共享笔记本电脑的互联网?这里提供详细步骤

这篇文章介绍了如何通过将手机变成Wi-Fi热点来与手机共享笔记本电脑的互联网连接。 如何共享笔记本电脑的互联网连接 你可以通过Wi-Fi或有线共享笔记本电脑的数据连接,具体取决于你的设置。 Windows Windows允许你通过ICS共享你的互联网连接。ICS,或称互联网连接共享,是W…

ARM Coresight 系列文章 11.1 -- CoreSight Cortex-M33 CTI 详细介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 CTI 的工作原理CTI 主要特点CTI的使用场景CTI 的工作原理 CTI 允许不同的调试和追踪组件之间基于特定事件进行交互。例如,当一个断点被命中时,CTI 可以用来触发内存的追踪捕捉或者外部仪器的行为,反之亦然。这种…

java项目的文件结构

java项目的文件结构 commomconfigcontorlledtoentity 在一个典型的 Java 项目中,通常会遵循一定的文件结构约定, 以下是一个常见的 Java 项目文件结构示例:/YourProjectName/src/main/java/com/example/projectMain.java/resourcesconfig.pro…

【华大 HC32L110】调用`printf`和串口接收中断的冲突问题解决

华大单片机 HC32L110调用printf和串口接收中断的冲突问题解决,经过查找是官方库 去使能了 串口的接收功能,记录解决问题的过程 目录 1.硬件MCU资料2. printf和串口接收中断的冲突解决3.重新封装 fputc 函数4.查找问题,发现是官方库配置有误5.…