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

MySQL事务原理

在MySQL中并发执行多个事务,如果对同一批数据进行修改操作,就会导致出现脏写,脏读,不可重复读,幻读这些问题。
事务具有以下四个属性,简称ACID
原子性(Atomicity):当前失误的操作要么同时成功,要么同时失败。原子性由undo log日志来实现
一致性(Consistent):使用事务的最终目的,由其他3个特性以及业务代码正确的逻辑实现
隔离性(lsolation):在事务病房执行时,他们内部的操作不能互相干扰。隔离性由MySQL的各种锁以及MVCC机制来实现。
持久性(Durable):一旦提交了事务,他对数据库的改变就应该是永久性的。持久性由redo og日志来实现的。

脏写
当两个或多个事务选择同一行数据修改,有可能发生更新数据丢失,即最后的更新覆盖了由其他事务所做的更新。
脏读
事务A读取到了事务B已经修改但尚未提交的数据
不可重复读
事务A内部的相同查询语句在不同时刻读取的结果不一致
幻读
事务A读取到了事务B提交的更新数据

在隔离性中,对于事务的隔离级别及其对应产生的问题如下
在这里插入图片描述

其中MySQL默认的事务隔离级别为可重复读。

  • 大事务的影响 并发的情况下,数据库连接池容易被撑爆
  • 锁定的数据太多,造成大量的阻塞和锁超时
  • 执行的时间长,容易造成主从延时
  • 回滚需要的时间长
  • undo log容易膨胀
  • 容易导致死锁

优化方案

  • 将查询等数据准备操作放到事务外;
  • 事务中避免远程调用,远程调用要设置超时
  • 避免一次性处理的数据太多,进行拆分
  • 更新等涉及到加锁的操作可以放到最后
  • 能异步处理可以异步
http://www.xdnf.cn/news/16349.html

相关文章:

  • 应用程序 I/O 接口
  • 【MySQL 数据库】MySQL基本查询(第二节)
  • 系统性学习C语言-第二十三讲-文件操作
  • 谷歌无法安装扩展程序解决方法(也许成功)
  • Kubernetes 与 Docker的爱恨情仇
  • STM32-定时器的基本定时/计数功能实现配置教程(寄存器版)
  • 【工具】好用的浏览器AI助手
  • 用unity开发教学辅助软件---幼儿绘本英语拼读
  • 【深度学习新浪潮】什么是GUI Agent?
  • java面试复习(spring相关系列)
  • 【机器学习-2】 | 决策树算法基础/信息熵
  • 【RocketMQ】一分钟了解RocketMQ
  • Earth靶机攻略
  • linux线程概念和控制
  • 字符串缓冲区和正则表达式
  • Mingw 与MSYS2 与Cygwin区别
  • Linux如何执行系统调用及高效执行系统调用:深入浅出的解析
  • 基于深度学习的胸部 X 光图像肺炎分类系统(七)
  • 凝思系统6.0.80安装chorme,亲测可用
  • 如何创建或查看具有 repo 权限的 GitHub 个人访问令牌(PAT)
  • mount: /mnt/sd: wrong fs type, bad option, bad superblock on /dev/mmcblk1
  • FitCoach AI:基于React+CloudBase的智能健身教练应用开发全解析
  • 缓存一致性:从单核到异构多核的演进之路
  • Android Jetpack 组件库 ->WorkManager
  • Linux系统架构核心全景详解
  • Unity 实现帧率(FPS)显示功能
  • 11Linux文件压缩与链接实战技巧
  • 深入解析YARN中的FairScheduler与CapacityScheduler:资源分配策略的核心区别
  • Python 数据分析(二):Matplotlib 绘图
  • 小白成长之路-部署Zabbix7(二)