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

【学习笔记】MySQL技术内幕InnoDB存储引擎——第7章 事务

第7章 事务

A 原子性:事务要么全部成功,要么全部失败
C 一致性:各种正确性约束全部生效,保证完整性
I 隔离性:事务互不影响,与隔离级别有关
D 持久性:长久的保存于磁盘;永久性的,即使发生故障后也可以修复

7.1 认识事务

7.1.1 概述

持久性指的是可靠性,而不是可用性

7.1.2 分类

1>扁平事务
最简单,使用最频繁,所有操作全部成功/失败
2>带有保存点的扁平事务
可以通过保存点来回滚事务中的部分操作,可设置多个保存点,事务开始时有隐式保存点,回滚后不释放锁,可以回滚至任意一个保存点
3>链事务
一个事务提交后一个事务开始,事务中的提交与下个事务的开始具有原子性。
只能回滚当前的事务,并释放当前事务持有的锁。
3>嵌套事务
①可以使用带保存点的扁平事务来模拟嵌套事务
②只有叶子节点可以操作数据库(DML)
③当父节点回滚时,子节点提交了也会回滚(不具备D特性)
4>分布式事务
访问网络中的不同节点(不同实例上的数据库),可以满足事务
【InnoDB不支持嵌套事务】

7.2 事务的实现

隔离性:锁机制
一致性、原子性、持久性:redo、undo log

7.2.1 redo

1>当事务提交时写入磁盘,master现场每一秒写入磁盘。可通过配置,不严格的将redo log写入磁盘,提升性能,但不保证D特性(P295)
fsync操作(将文件缓存写入磁盘操作)决定了事务性能(数据库行性能)
2>log block
重做日志块大小为512字节和磁盘扇区大小一致
3>log group
事务提交时将log block刷新到磁盘
当log buffer 中有一半内存空间已被使用时将log block刷新到磁盘
当到达log check point时将log block刷新到磁盘
4>重做日志格式
①重做日志的类型
②表空间ID
③页偏移量
5>LSN(日志序列号)
①存在于重做日志与每个页中
②内容:1.重做日志写入总量 2.cheak point位置 3.页的版本
6>恢复
InnoDB启动时不论上次是否正常关闭,都会尝试恢复cheak point之后的数据

7.2.2 undo log

1>在回滚操作中,会用到undo log
在MVCC非锁定读中,会用到undo log
undo log是逻辑日志,在回滚时,对于Insert,执行delete,对于delete,执行insert,对于upodate,反向update
2>undo log的写入操作会生产redo log日志,因为undo log也需要持久化
事务提交后不会马上删除undo log,因为MVCC还会依赖历史版本的undo log
3>insert undo log 会在事务提交时删除,但delete与update不是

7.2.3 purge

在delete或者update时,有时会将该记录打上delete标记,而实际并未删除,在purge中会统一集中的真正删除数据以及undo log
###7.2.4 group commit
不太理解,目前认为是将多个写磁盘任务合并,多个和事务的log可以同时用fsyn刷入磁盘,事务越密集,效果越好

7.3 事务控制语句

7.4 隐式提交的SQL语句

不能回滚的语句:P328

7.5 对于事务操作的统计

1>每秒请求数(QPS)
2>每秒事务处理能力(TPS)
TPS = (com_commit + com_rollback) / time
【可以准确计算显式提交事务,但对于隐式提交则不够准确】

7.6 事务的隔离级别

InnoDB的可重复读由于使用了间隙锁加行锁,不会产生幻读的问题,但与真正的串行化还是大不相同的。
串行化就是不使用MVCC了,直接加S锁。不非锁定读了。

7.7 分布式事务

利用XA事务实现分布式事务,即使是不同的数据库系统,只要都实现了XA事务,即可实现分布式事务
1>组成:
①资源管理器:提供访问事务资源的方法,通常一个数据库就是一个资源管理器
②事务管理器:协调参与全局事务的各个事务
③应用程序:定义事务处理边界,指定全局事务中的操作
2>具体实现
每一个资源管理器会将处理结果上报事务管理器,若都可提交,则都提交
若一个事务无法提交,则事务管理器会通知全部资源管理器回滚

7.8 不好的事务习惯

1>在循环中提交
2>自动提交
3>自动回滚(MySQL的自动回滚无法知晓异常信息)

7.9 长事务

可将耗时很长的事务拆分为小事务处理,因为长事务的回滚时很难的

http://www.xdnf.cn/news/1232569.html

相关文章:

  • 【Java】在一个前台界面中动态展示多个数据表的字段及数据
  • InfluxDB 与 Node.js 框架:Express 集成方案(二)
  • 中州养老项目:Mybatis自动填充拦截器
  • 大模型Agent记忆的主流技术与优缺点解析
  • 网页操作自动化解决方案:如何用Browser-Use+CPolar提升企业运营效率
  • CYUSB3014-BZXC-USB3.0接口芯片-富利威
  • 解锁智能油脂润滑系统:加速度与温振传感器选型协同攻略
  • Javascript面试题及详细答案150道之(016-030)
  • 前端与后端部署大冒险:Java、Go、C++三剑客
  • SQL语言学习(group by,having)
  • 半导体物理复习
  • TypeScript03-web项目知识
  • 路面障碍物识别漏检率↓76%:陌讯多模态融合算法实战解析
  • linux 启动流程?
  • C++入门基础(三):const引用、指针和引用的关系、inline(修饰内联函数)替代宏、nullptr代替null
  • .env 文件
  • 对于考研数学的理解
  • 【MySQL】增删改查操作 —— CRUD
  • 【软考中级网络工程师】知识点之级联
  • 驾驶场景玩手机识别:陌讯行为特征融合算法误检率↓76% 实战解析
  • 数字化转型驱动中小制造企业的质量管理升级
  • 梦幻花瓣雨
  • [mssql] 分析SQL Server中执行效率较低的SQL语句
  • 关于echarts的性能优化考虑
  • 蓝桥杯----串口
  • 我的世界进阶模组教程——物品(2)
  • 【redis】基于工业界技术分享的内容总结
  • 力扣 hot100 Day63
  • OLTP,OLAP,HTAP是什么,数据库该怎么选
  • ADB 查看 CPU 信息、查看内存信息、查看硬盘信息