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

mysql ACID 原理

序言:ACID 是一组数据库设计原则,他是业务数据和关键业务程序的可靠性保障。

1、atomicity(原子性)

依赖如下能力

autocommit
commit 
rollback

2、一致性

2.1 double write buffer
1、定义:double write buffer 是一块空间,mysql 将缓冲池的数据写入到此空间,然后 flush 到 mysql 数据存储空间。当 mysql 发生异常退出时,会从这个空间恢复数据。
2、可能问题:double write buffer 会造成两倍磁盘IO 吗?
不会,写入double write buffer 使用OS 调用 fsync()方法,每次写入一块大的 chunk 数据。(顺序 IO)
2.2 crash recovery

mysql 异常恢复分为如下几步进行

2.2.1 tablespace discovery
mysql 启动时会扫描tablespace空间,看是否有表需要 recovery。
2.2.1 redo log application

重要知识:checkpoint(检查点) 是 redo log 管理的核心机制之一。它的核心作用是 标记哪些数据修改已经持久化到磁盘,从而优化崩溃恢复的效率并回收 redo log 空间

1、redo log 存储方式:redo log,存储物理日志 记录数据页的变化(即第几页第几行变动),用于 mysql 程序异常退出后恢复。
redo log 在磁盘中是一系列文件,在事务成功提交并且写入后会被清理,此空间会重复使用
2、redo log 的写入:写入 redo log buffer,默认事务提交时强制刷盘 innodb_flush_log_at_trx_commit。(可每秒刷盘 0 ,OS 异步刷盘)

在这里插入图片描述

2.2.2 回滚未提交事务
2.2.3 change buffer merge
redo log 中会存储buffer pool 和 change buffer 中的数据,在 redo log 重放时,会根据 checkpoint 位置恢复对应的 change buffer
2.2.4 purge
清除被标记删除的,并且在所有事务中不可见的数据。
http://www.xdnf.cn/news/661015.html

相关文章:

  • OpenCV CUDA模块图像过滤------创建一个 Sobel 滤波器函数createSobelFilter()
  • 高并发下使用防重表做防重案例
  • Linux 常用操作步骤
  • ubantu给github配置ssh
  • Unity—lua基础语法
  • MyBatis-Plus 中 的动态SQL 片段(sqlSegment)讲解
  • 速卖通,国际站测评补单,如何平衡效率和安全
  • C++ ——new和malloc的区别(详细)
  • GROMACS 本地部署教程:模拟生命密码,解码科学未来!
  • 力扣面试150题--二叉搜索树迭代器
  • Spring参数解析异常:Name for argument of type [java.lang.String] not specified 深度解析
  • 【Spring AI集成实战】基于NVIDIA LLM API构建智能聊天应用:从配置到函数调用全解析
  • PT_THREAD 的嵌套协程示例
  • 唯一原生适配鸿蒙电脑的远程控制应用,向日葵正式上线
  • MyBatis-Plus 深度解析与高效实践指南
  • Spring Security6.5 菜鸟教程
  • HarmonyOS NEXT~HarmonyOS 语言仓颉:下一代分布式开发语言的技术解析与应用实践
  • PostgreSQL 权限问题解决方案查看磁盘多少GB 已使用多少GB
  • 20250526-C++基础-函数指针
  • Pyhton_25_5_26
  • 中断和异常
  • 2025-05-26 什么是“AI 全栈”
  • K8s中间件Kafka上云部署
  • Treasures in Discarded Weights for LLM Quantization阅读
  • 华为OD机试_2025 B卷_欢乐的周末(Python,100分)(附详细解题思路)
  • Anaconda 在 Windows 上的安装教程
  • SpringBoot3集成Oauth2.1——7数据库存储用户信息
  • 基于DDD的企业团餐订餐平台微服务架构设计与实现(二)
  • GitLab 18.0 正式发布,15.0 将不再受技术支持,须升级【二】
  • sd webui 安装sd-webui-TemporalKit 加载报错解决办法