【MySQL】事务日志

  事务的隔离性由锁机制实现,事务的原子性、一致性和持久性由redo日志和undo日志实现。

一、redo日志

1.1、为什么需要redo日志

  一方面,由于数据从内存写回磁盘需要一定的时间,假如在事务提交后,还没有写回磁盘,数据库就宕机的话,那么这段数据就无法恢复了。
  另一方面,为了维持事务的持久性。对于一个已经提交的事务,即使提交后系统崩溃,也要保证这个事务对数据库中所做的更改也不能丢失。
  保证持久性的方法:

  • 在事务提交完成前把该事务所修改的所有页面都刷新到磁盘,虽然方法简单,但是修改量与刷新磁盘的工作量严重不成正比,仅仅为了修改一个字节的数据可能就要刷新一页的数据在磁盘上。并且由于页面可能并不相邻,使用到的随机IO刷新较慢

  • 另一种解决思路是把修改的东西记录一下。比如记录在第0号表的10号页面的偏移量为100处的值更新为2。
      redo日志就采用了WAL技术(Write-Ahead Logging),这种技术的思想是先写日志、再写磁盘,日志写入成功就算提交成功。当发生宕机时,就可以通过redo日志来恢复。

1.2、redo日志的好处

好处

  • 1、redo日志降低了磁盘刷新频率
  • 2、redo日志占用的空间非常小

特点

  • redo日志顺序写入磁盘
  • 事务执行过程中,redo日志不断记录。

1.3、redo组成

重做日志的缓冲
  在数据库服务器启动时向系统申请了一大片称为redo log buffer的连续空间。这片空间被划分为若干个redo log block
在这里插入图片描述

1.4、redo更新流程

在这里插入图片描述
1、将数据从磁盘读到内存中
2、生成redo日志并写入redo log buffer
3、当事务commit后,将redo log buffer中的内容刷新到redo log file中。
4、定期将内存中修改的数据刷新到磁盘中。

1.5、redo log刷盘策略

1.6、redo log file

日志文件组
在这里插入图片描述
  总共的redo日志文件大小为innode_log_file_size * innode_log_files_in_ group 。采用这种循环的方式向redo日志文件组中写入数据,会导致后写入的数据覆盖掉前面的数据。

check point
  这个日志文件组有两个重要的属性:

  • write pos是当前位置,一边写一边后移
  • checkpoint是当前要擦除的位置,也是后移。

  结构类似于循环队列:

在这里插入图片描述

二、undo日志

  redo日志保证了事务的持久性,undo日志保证了事务的原子性

2.1、undo日志的理解

  每当我们对一条记录进行改动时,都需要把回滚的东西记录下来。比如:

  • 对于每个INSERT,InnoDB引擎就会完成一个DELETE
  • 对于每个DELETE,InnoDB引擎就会完成一个INSERT
  • 对于每个UPDATE,InnoDB引擎就会完成一个相反的UPDATE

  这些为了回滚而记录的内容称为回滚日志(undo log)。此外,undo log也会产生redo log来保证持久性。

2.2、undo日志作用

  • 回滚数据
      undo日志只是将数据库逻辑的恢复,但是数据在物理磁盘上的存储可能不太一样。
  • MVCC
      多版本并发控制

2.3、undo存储结构

2.3.1、回滚段与undo页

回滚段InnoDBundo log的管理采用段的方式
undo页:每个回滚段记录了1024个undo log segment,在每个undo log segment中进行undo页的申请。
undo页的重用:如果为每个事务分配一个页(一页默认16K),且每秒处理1000个事务,那么每秒就需要16K*1000=16M的空间,运行时间长了就会导致磁盘空间的浪费。
  重用表示多个事务共用一页,如果事务提交后,则不会立即删除undo页,而是被挂到链表中,对其已使用空间进行判断。

  • 已使用空间大于等于3/4,回收
  • 已使用空间小于3/4,继续被重用。
2.3.2、回滚段与事务
  • 每个事务只会使用一个回滚段,一个回滚段在同一时刻可能会服务于多个事务
  • 在事务开始时,会制定一个回滚段,在事务进行中发生数据修改,原始数据会复制到回滚段。
  • 在回滚段中,事务会不断填充盘区,不够用时请求下一盘区,盘区用完覆盖初始盘区。
  • 回滚段存在于undo表空间,数据库中可以存在多个undo表空间,但同一时刻只能使用一个undo表空间。

补充:purge线程
作用:

  • 清理undo页
  • 对页里的数据行打标签从而进行假删除。

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

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

相关文章

优雅地处理前端数据转换:自定义封装 translateDict 函数

在前端开发中,我们经常需要处理数据的转换。有时候,我们需要将某种格式的数据转换为另一种格式,这可能涉及到字符串、数组等不同数据类型的转换。在这篇博客中,我们将介绍一个名为 translateDict 的函数,它可以帮助我们…

Rancher(v2.6.3)——Rancher部署Nginx(单机版)

Rancher部署Nginx详细说明文档:https://gitee.com/WilliamWangmy/snail-knowledge/blob/master/Rancher/Rancher%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3.md#5rancher%E9%83%A8%E7%BD%B2nacos ps:如果觉得作者写的还行,能够满足您的需求&#x…

LeetCode225:用队列实现栈

题目描述 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元…

web前端面试题---->HTML、CSS

一.居中方法 block元素如何居中 margin:0 auto;position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);flex布局: 对父元素操作 : justify-content:center; al…

商城小程序项目实现监控的可观测性最佳实践

前言 微信小程序是一种轻量级的应用程序,用户可以在微信内直接使用,无需下载安装。它具有独立的开发框架和生态系统,支持丰富的功能和交互,包括社交、购物、服务等。 观测云对微信小程序的监控能够实时收集性能指标、错误日志和…

深入理解 C++ 中的 IO 流【iostream篇】

C 中的输入输出流(iostream)是非常重要的一部分,它们提供了与用户交互以及与文件系统进行数据交换的功能。本文将深入探讨 C 中的 cin 和 cout,介绍它们的使用方法、缓冲区以及常用的成员函数等相关知识。 1. cin 和 cout 的基本…

[蓝桥杯 2019 省 B] 特别数的和

题目描述 小明对数位中含有 22、00、11、99 的数字很感兴趣(不包括前导 00),在 11 到 4040 中这样的数包括 11、22、99、1010 至 3232、3939 和 4040,共 2828 个,他们的和是 574574。 请问,在 11 到 &…

分布式系统CAP理论

1、什么是CAP理论 C是Consistency(强一致性)、A是Availability(可用性)、P是Partition Tolerance(分区容错性),一个分布式系统不可能同时很好的满足—致性、可用性和分区容错性这三个需求,不能同时成立,最多只能同时满足其中的两项&#xff…

MPIRUN 31280 segmentation fault (core dumped)

用mpirun运行多节点nccl时有时候出现hang死,而且是指定了mpi_host的情况 nccl正常,各节点通信正常,但是一跑mpirun就卡死,core dump。 提前退出: [worker0:38156] *** Process received signal *** [worker0:38156] …

Linux系统运维命令:找出某个分区或者路径下 占用磁盘空间最多的文件和目录

目录 一、需求 二、解决方法 1、解决思路 2、组合命令 3、du命令 三、实例演示和命令解释 1、实例演示 (1)查看当前路径下文件和目录 (2)命令效果展示 2、命令解释 (1). du -cks (2…

rt-thread开发之sccb通讯协议记录(用于ov7670)

头文件 /** Copyright (c) 2024-2024,shchl** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date Author Notes* 2024-3-26 shchl first version*/#ifndef F4_OS_SCCB_H #define F4_OS_SCCB_H#include "board.h"#define …

小白学视觉 | 图像上的 OpenCV 算术运算

本文来源公众号“小白学视觉”,仅用于学术分享,侵权删,干货满满。 原文链接:图像上的 OpenCV 算术运算 1 OpenCV 简介 图像可以进行算术运算,例如加法、减法和按位运算(AND、OR、NOT、XOR)。…

电商系列之仓储发货

疫情3年,大多数人都将购买需求转移到了线上。同时由于暴涨的订单数量、还在恢复中的物流运输等因素,导致用户的收货时间缓慢甚至是发货时间、收货时间延后。那么笔者就从订单的仓库作业流程入手,分析了用户订单发货延后的原因。 受到最近疫情…

简历工具推荐

HR浏览一份简历也就25秒左右,如果你连「好简历」都没有,怎么能找到好工作呢? 以最简单的方式来写好简历,只需专注内容本身而无需关注排版。这样的效果才是我们想要的,这里推荐使用入职啦简历,这个工具最大的…

RuoYi-Vue-Plus(sa-token)

一、介绍 官网: Sa-Tokenhttps://sa-token.cc/index.html 特性: 登录与权限认证:支持用户登录和细粒度权限认证。会话管理:提供会话创建、维护和销毁功能。单点登录:支持单点登录,简化多应用登录流程。OAu…

npm安装yarn和pnpm

安装yarn: 首先,确保你的系统中已经安装了Node.js和npm。这是使用npm安装yarn的前提条件。打开命令行工具(如终端或命令提示符)。运行以下命令来全局安装yarn: npm install -g yarn 安装完成后,你可以通过…

聚类分析|基于层次的聚类方法及其Python实现

聚类分析|基于层次的聚类方法及其Python实现 0. 基于层次的聚类方法1. 簇间距离度量方法1.1 最小距离1.2 最大距离1.3 平均距离1.4 中心法1.5 离差平方和 2. 基于层次的聚类算法2.1 凝聚(Agglomerative)2.3 分裂(Divisive) 3. 基于…

spring boot3登录开发(整合jwt)

Spring Boot 3 整合 JWT(JSON Web Tokens)用于登录开发涉及多个步骤。JWT 是一种开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。这些信息可以被验证和…

香港驾照好处 大陆驾驶证换香港驾照条件 大陆驾驶证换香港驾照流程

持有香港驾驶证的好处: 1、国际认可:香港驾驶证在国际上被广泛认可,持有该驾驶证可以在许多国家和地区自由驾驶。 2、多样性:香港驾驶证覆盖了多种车辆类型,包括轿车、摩托车、巴士、卡车等,持有该驾驶证…

【vue】computed和watch的区别和应用场景

Computed 和 Watch 是 Vue.js 中用于监视数据变化的两个不同特性,它们各自有不同的应用场景和功能。 Computed: 计算属性(Computed properties)用于声明基于其他数据属性的计算值。它具有缓存功能,只有在依赖的数…