MYSQL日志和事务原理

news2024/11/17 19:36:11

1)重做日志:在一个事务中会涉及到多个DML操作,修改的是在内存层面数据页中的数据,还没有及时的将修改之后的数据更新到磁盘中,真正的将更新后的数据写回到磁盘的时候才满足持久性,只是更新内存是不满足持久性的,如果只是更新内存就不叫做持久性,持久性是即使出现数据库的故障,宕机,也不能改变数据被修改的事实,如果出现内存中修改,结果以当即导致磁盘没有被修改,再一恢复,发现磁盘并没有修改,redolog是记录的是物理磁盘上面的页修改操作,比如说页号XXXX,偏移量XXX,写入了什么数据,主要是保证数据的可靠性,实打实物理磁盘的记录;

2)redo和undo都认为是一种数据恢复的操作

3)undolog其实实际上是一种逻辑上的操作,比如说我们写的SQL是逻辑上的操作,unlog记录的是逻辑相反的操作

1)为什么是以一定频率刷入磁盘?

因为写入磁盘本身就慢,刷盘中的页本身可能是不连续的,随机IO,性能不太好

2)假设事务里面有很多DML操作,这些DML操作都是操作的是内存中的数据,这个时候事务提交了,内存中的数据的修改都完成了,此时磁盘还没有被写入刷盘,逻辑上磁盘上的数据应该被修改了,但是此时commit操作MYSQL宕机了断电了,内存中的数据还没刷盘,如果这个时候没有redlog日志,再次重启内存中的数据没了,磁盘上的数据还是从前的,相当于事务没有执行,此时事务就不保证持久性;

3)能不能内存中修改数据,马上就修改磁盘数据,就以一定的频率刷入磁盘?

内存和磁盘是依靠页为单位来进行数据交互的,假设修改了一个字节,那么结果是要把整个页刷到磁盘中,数量大小的对比,效率太低,每进行一个字节的修改操作,都要刷盘嘛?

4)假设进行一个update不加条件,修改的数据在不同的页中,那么此时进行刷盘操作随机IO太麻烦,所以实时修改不太靠谱;

5)binlog日志,比如说在主从复制的环境下,主机负责写,从机负责读,那么如何来保证主从数据的一致性呢?就是依靠binlog二进制来实现的,比如说现在在主机中新增了一条记录,那么就在binLog中记录一下,从机从binlog中获取记录

 

redolog的刷盘策略:将redologbuffer中的数据放在redlogfile中

1)假设现在要进行更新操作,那么首先MYSQL会将要更新的数据的表加载到内存中 

2)修改完成之后,先在redologbuffer中做一个记录

3)然后再将内存层面中的redologbuffer中的数据写入到磁盘中的readlogfile;

4)最后进行刷盘;

真正的将文件系统cache中的数据刷入到redolog日志中,是由文件系统本身决定的

1)当设置成1的时候,随着事务的提交,redologbuffer中的数据马上就会刷到文件系统缓存中,然后这些数据会从文件系统缓存刷到redlog日志中

2)当设置成0的时候,事务提交,表示不会立即进行刷盘操作,而是等1s之后再进行刷盘操作,innodb会有一个后台线程,每隔1s就会将redo log buffer的内容写到文件系统缓存中然后再来执行刷盘操作

总结就是:0:延迟写,延迟刷,1:实时写,实时刷,2:实时写,延迟刷

只要修改数据,redo log buffer就会实时地做记录,参数影响的只是log buffer中的刷盘策略

undolog日志:
 

锁:
 

当在READ COMMITED情况下,ReadView中记录的是读已提交的数据(记录的是已提交事务

,此时Select操作只能读到已经提交的数据

 

比如说T1给表中的数据加了一个X锁,不管是T2的事务操作这一行数据加的是X锁还是S锁,实际上都是需要进行阻塞的

写的时候一定要加上排他锁

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

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

相关文章

lv5 嵌入式开发-8 内存映射

目录 1 内存映射基本使用 1.1 内存映射概念 1.2 内存映射的使用 2 共享内存(古老的 System V IPC) 2.1 基本概念 2.2 共享内存使用步骤 2.3 共享内存使用 掌握:内存映射概念、内存映射使用、内存映射注意事项、了解SYSTEM V 共享内存概…

OV2640图像出现细小条纹问题

说明:条纹是随机生成的,有时候几根线,有时候10多根线 怀疑点: 1-走线,看网上说所有的时钟线和同步线不要交叉,不要太长没有验证 2-电源,1.2V和2.8的电源 刚开始以为是自己电路问题&#xff0c…

栈(Stack)和队列(Queue)

栈(Stack)和队列(Queue)都是常见的数据结构,用于存储和操作一组元素。 栈是一种后进先出(Last-In-First-Out,LIFO)的数据结构,类似于把元素堆在一起形成的一堆物体&…

PTA程序辅助实验平台——2023年软件设计综合实践_3(分支与循环)

第一题:7-1 印第安男孩 - C/C 分支与循环 朵拉编程的时候也想顺便练习英语。她编程从键盘读入一个整数n,如果n值为0或者1,向屏幕输出“0 indian boy.”或“1 indian boy.”;如果n大于1,比如9,则输出“9 in…

Ctfshow web入门 XSS篇 web316-web333 详细题解 全

CTFshow XSS web316 是反射型 XSS 法一&#xff1a; 利用现成平台 法二&#xff1a; 自己搭服务器 先在服务器上面放一个接受Cookie的文件。 文件内容&#xff1a; <?php$cookie $_GET[cookie];$time date(Y-m-d h:i:s, time());$log fopen("cookie.txt"…

SSM - Springboot - MyBatis-Plus 全栈体系(十四)

第三章 MyBatis 二、MyBatis 基本使用 1. 向 SQL 语句传参 1.1 mybatis 日志输出配置 mybatis配置文件设计标签和顶层结构如下&#xff1a; configuration&#xff08;配置&#xff09; properties&#xff08;属性&#xff09;settings&#xff08;设置&#xff09;typeAl…

7、SpringBoot_高级配置

一、配置高级 1.临时属性设置 1.1引出问题 如果目标电脑上8080端口已经使用&#xff0c;再次使用该端口会出现端口占用问题 解决方式 重新更换配置文件修改端口打包通过临时属性配置新端口更换配置文件 1.2添加临时属性配置 通过临时属性修改8080端口 java -jar 项目.jar…

zemax目镜调焦演示

目镜的焦距应当是可变的&#xff0c;就像我们使用显微镜时&#xff0c;可以通过旋转调节旋钮&#xff0c;使得图像变得清晰&#xff0c;目镜的焦距也可以调整&#xff0c;使得要被观察的像出现在合适的位置。 这样&#xff0c;不同的人都可以使用同一台仪器&#xff0c;不管近…

Spring5应用之AOP额外功能详解

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 前言MethodBefore…

Doris数据库FE——启动流程源码详细解析

Doris中FE主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作。代码路径&#xff1a;doris/fe/fe-core/src/main/java/org/apache/doris/DorisFE.java 环境检查 在启动FE的时候&#xff0c;主要做环境检查。检查一些启动时必要的环境变量以及初始化配置…

社区团购新零售搭伙拼团小程序源码(前后端)

社区团购新零售搭伙拼团小程序源码是一款非常实用的电商小程序&#xff0c;它包含了前后端文件&#xff0c; 可以快速地进行部署和使用。该小程序是基于微信小程序开发的&#xff0c;支持社区团购、新零售、搭伙拼团等多种功能。 该小程序具有良好的用户体验&#xff0c;包括…

范数Norm-衡量向量大小的方法

性质 非负性: 范数的值总是非负的,且当且仅当向量全为零时,范数的值为零。 齐次性: 对于任意实数α,有 三角不等式: 对于任意向量x和y,有 常见范数 L1: 向量所有元素绝对值的和,权重稀疏 L2:欧几里得范数,权重平滑 无穷范数:表示向量中最大的元素 为什么使用范…

英飞凌 Tricore 架构中断系统详解

本文以TC3系列MCU为例&#xff0c;先来了解中断源是如何产生的&#xff0c;再看一下CPU是如何处理中断源的。 AURIX TC3XX的中断路由模块 Interrupt Router (IR) 在TC3中&#xff0c;中断既可以被CPU处理&#xff0c;也可以被DMA处理&#xff0c;所以手册中不再把中断称为中断…

vue3硅谷甄选02 | 封装svg组件 - axios二次封装

文章目录 vue3硅谷甄选02功能1&#xff1a;封装svg组件SVG图标配置svg封装成组件svg组件注册为全局组件自定义统一注册全局组件的插件自定义插件的原理插件的使用 app.use(plugin, [options]) 功能2&#xff1a;axios二次封装使用mock插件构造数据axios二次封装api接口统一管理…

【大数据开发技术】实验01-Hadoop安装部署

文章目录 Hadoop安装部署一、实验目标二、实验要求三、实验内容四、实验步骤附&#xff1a;系列文章 Hadoop安装部署 虚拟机数量&#xff1a;3 系统版本&#xff1a;Centos 7.5 Hadoop版本&#xff1a; Apache Hadoop 2.7.3 主节点信息&#xff1a; 操作系统&#xff1a;Cen…

Tomcat 与 JDK 对应版本关系

对应关系 Tomcat版本 jdk版本11.0.x JDK 21及以后10.1.x JDK11及以后10.0.xJDK1.8及以后9.0.x JDK1.8及以后8.5.xJDK1.7及以后8.0.x JDK1.7及以后 查看对应关系方法&#xff1a; 登陆Tomcat官网&#xff1a;Apache Tomcat - Welcome! 结果&#xff1a;

Arthas:Java调试利器使用

Arthas:Java调试利器使用 1. Arthas是什么2. Arthas可以解决什么问题Arthas启动方式1. jar启动2. 在线安装 远程连接命令使用- 退出threadclassloaderscsm watchtrace修改日志级别 1. Arthas是什么 Arthas(阿尔萨斯)是阿里开源的一个Java在线分析诊断工具. 2. Arthas可以解决…

C#(CSharp)入门实践项目(简易回合制游戏)

项目名称 木木夕营救公主 项目介绍 这是一个小游戏&#xff0c;你将扮演一个英雄&#xff08;木木夕&#xff09;&#xff0c;去打败恶龙&#xff0c;拯救出公主&#xff0c;该项目采用回合制战斗模式&#xff0c;由于角色的血量和攻击为随机数&#xff0c;所以需要靠运气才…

YOLOv7改进:CBAM注意力机制

目录 1.介绍 1.1、论文的出发点 1.2、论文的主要工作 1.3、CBAM模块的具体介绍 2.YOLOv7改进 2.1yaml 配置文件如下 2.2common.py配置 2.3yolo.py配置 1.介绍 1.1、论文的出发点 cnn基于其丰富的表征能力&#xff0c;极大地推动了视觉任务的完成&#xff0c;为了提高…

【MySql】3- 实践篇(一)

文章目录 1. 普通索引和唯一索引的选择1.1 查询过程1.2 更新过程1.2.1 change buffer1.2.2 change buffer 的使用场景 1.3 索引选择和实践1.4 change buffer 和 redo log2. MySQL为何有时会选错索引?2.1 优化器的逻辑2.1.1 扫描行数是怎么判断的?2.1.2 重新统计索引信息 2.2 …