mysql事务(MVCC机制:undo日志)(mysql执行过程:redo日志,Buffer Pool缓存池)

news2024/11/15 16:00:58

事务

目的:保证数据的最终一致性## 事务的目的

事务的4大特性(ACID)

1.原子性(Atomicity):由undo log日志来保证
2.一致性(Consistency):使用事务的最终目的,由业务代码正确逻辑保证,比如错误的try-catch
3.隔离性(Isolation):在事务并发执行时,他们内部的操作不能互相干扰
4.持久性(Dur©bility):一旦提交了事务,对数据库的改变就应该是永久性的。由redo log日志来保证
在这里插入图片描述

事务的隔离级别(4种)

事务隔离级别:从小到大,级别越高,数据直接影响越小
1.read uncommit 读未提交
2.read commit 读已提交:oracle 数据库默认
3.repeatable read 可重复度 :mysql 数据库默认
4.serializble 串行

每个隔离级别的缺点:
1.读未提交:读到了没有提交的数据,即脏读,性能很高,但不会使用
2.读已提交:不可重复读,在当前事务中,(由于其他事务已提交)每次读取到的数据都不一样,例如,在一个方法中,第一次读取时值是100,当其他事务提交后,将该值改为200,那么在该事务中再次读取时,就会变成200。
3.可重复读:幻读,脏写,在当前事务中,不管其他事务怎么提交数据,每次读到的值都一样。
4.串行:阻塞,效率低,当前事务未执行完,其余事务都得排队等待。

在这里插入图片描述

MVCC机制(多版本并发控制)(undo日志版本链)

引申:写时复制 机制(copy on write ):更新副本,然后进行替换。
这样机制优点是:读写分离,这样不管读操作和写操作,都可以支持并发。
虽然在替换过程中,可能会读到旧数据,但是在并发场景下可以接收

MVCC :undo.log日志版本链
在这里插入图片描述

流程实现
数据库在每次插入数据时,每条数据都有对应的事务id和回滚指针
1.数据每次操作后,会在undo.log 日志中插入一条回滚数据,并标记事务和回滚指针
2.在每次写的时候,都是先复制,再修改。

读已提交,指的就是每次都读最新提交的数据
可重复读,指的是每次都读和当前事务绑定的数据
在这里插入图片描述

暴露问题

可重复读:脏写问题
原因:可重复读会读到之前版本的数据,利用之前的数据进行操作后,来修改数据库,这样就会出现脏写的问题
解决:
1.利用乐观锁
数据库增加版本字段,每次查询和修改时带上版本号,然后可以在业务代码中来循环重试根据版本号进行修改,直到修改成功。
在这里插入图片描述

2.直接数据库进行操作,这样会加悲观锁
在这里插入图片描述

mysql执行过程(持久性的实现)

redo日志(Buffer Pool缓存池)

1.写入数据时,InnoDB 会先将数据先放到 Buffer Pool缓存池
2.然后将要回滚的数据写入到undo日志
3.同步的会写到 redo日志(先写到redori值缓存,然后再写的redo 日志磁盘文件)(写入redo 日志成功,就表示数据写成功)
4.同时会写到binlog日志
5.再将缓存数写入到**.ibd数据**文件

写入redo 日志和写入 ibd 文件的区别

顺序写:顺序写的效率远高于随机写
rdeo 日志是顺序写,每次都是在文件末尾追加
ibd文件是随机写,每张表都有对应的ibd文件,所以无法顺序写
在这里插入图片描述

查询方法需要事务吗?

查询方法中有多条查询语句,若隔离级别时可重复读,则需要开启事务
基于时间维度,对于统计报表等来讲,使用事务可以读到同一时间点的数据。这样数据的一致性会更高

对于高并发场景下的公司,一般使用读已提交。
对于传统公司,需要更多报表统计的公司,使用可重复度,保证同一时间点的数据一致性。

事务优化

长事务:
在这里插入图片描述
优化方案:
1.查询放到事务外
2.处理数据过多,则拆分多个事务处理
3.先insert后update,更新update操作放到事务后面,insert 放到前面(update 语句其他其他事务可能会用到)
4.应用侧保证一致:即放弃事务,回滚操作等放到代码中实现
在这里插入图片描述

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

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

相关文章

若依Vue3图片预览大图遮罩层和表格的border css层级冲突

样式层级出现问题,表格的层级高于图片的层级 1.解决方式一:设置此文件的该属性(z-index)为继承,则显示正常 .el-table .el-table__cell { z-index: inherit; } 2.解决方式二:将此属性设置为true(本人试了…

Vscode 修改C++版本

1. 首先要检查GCC版本,有的gcc版本过低会导致C版本升级不成功 可以用cmd,用gcc --version命令查看gcc版本 我这里就是gcc版本较低,不支持c17 需要先升级gcc版本 gcc与c对应的版本,大家可以在这位大佬的博客中看,写…

闯关升级游戏特点,闯关小程序游戏开发

闯关升级类游戏一直以来都备受玩家青睐,其独特的游戏性和吸引力让人们乐此不疲。这类游戏以挑战性关卡和角色成长为核心,让玩家在不断的冒险中获得成就感与乐趣。让我们一起深入探讨这类游戏的特点,以及为何它们如此受欢迎。 挑战性关卡设计…

FPGA - 串口发送多字节数据

1,任务要求 关于uart串口接收与发送可以参考我的这篇博客:《FPGA-UART串口》。这篇博客实现了单字节发送与接收。 接下来,来使用串口发送多字节数据到电脑。 2,模块框图以及简单时序分析图 串口发送多字节数据的思路是把写入的…

Windows提示“无法删除文件:无法读源文件或磁盘”怎么办?

当用户在Mac电脑上创建一个文件,又将文件共享到Windows系统后,该文件可能无法被Windows正常识别和使用,并且在删除时出现“无法删除文件:无法读源文件或磁盘”的提示,这可能和Windows不支持Mac电脑创建的某些文件名有关…

Jmeter扩展开发--自定义java取样器

简介 jmeter内置了包括:http、https、tcp等各种协议的支持,通常情况只需要做简单的参数配置即可使用。但在某些特殊情况下,还是希望能做自定义压测处理,此时就涉及Jmeter的扩展开发自定义Java取样器,如下图所示&#…

基于物联网的智能家居监测与控制系统(全套资料)

项目源码资料下载地址: http://comingit.cn/?id29 易学蔚来全套毕设演示(看上哪个选那个): https://www.yuque.com/javagongchengshi/ccadbu/nh92kcpyqodhf07l 毕设服务真实反馈,在线观看: https://www.yu…

opencv中的图像高斯模糊—GaussianBlur

高斯模糊(Gaussian Blur)是一种广泛应用于图像处理的平滑技术,其通过对图像应用高斯函数来减少图像噪声和细节。与简单平均模糊(均值滤波)不同,高斯模糊给予中心像素更高的权重,而远离中心的像素…

介绍Oracle的SQL调化健康检查脚本(SQLHC)

概述 Oracle提供了一个SQL调优健康检查脚本(SQLHC),用于检查需要优化的SQL的运行环境,生成报告以便帮助DBA找到SQL性能不佳的原因。SQLHC是SQLT的一个子集(我后续的文章会介绍SQLT),但SQLHC与S…

#微信小程序(一个emo文案界面)

1.IDE:微信开发者工具 2.实验:一个emo文案界面 (1)最好使用rpx (2)图片宽度占不满,在CSS中设置width为100% (3)imag图片全部为网页链接图片 3.记录 4.代码 index.htm…

sqllab第二十关通关笔记

知识点: cookie注入 可以进行url解析错误注入传参位置 get请求post请求cookie传参 输入admin admin进行登录,抓取当前数据包 通过放包发现是一个302跳转的响应包,页面只有一个 I Love Cookies;没什么信息 通过点击页面上方的按钮…

Linux搭建FTP服务器

一、概念简介 vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件,本次实验介绍如何在Linux上安装并配置vsftpd。 FTP(File Transfer Protocol)是一种文件传输协议,基于客户…

vue antd table嵌套表格 左侧展开图标动态控制显示隐藏

antd a-table想要实现如以下效果&#xff0c;有子级就显示展开图标&#xff0c;没有就不显示图标&#xff1a; 话不多说&#xff0c;直接上代码&#xff1a; <template><a-table :columns"columns" :data-source"dataSource"><template #b…

电机参数辨识算法(1)——基于高频注入的电感辨识策略

今天将开启参数辨识的第一期。通过复现论文来学习电机参数在线辨识的方法。我会尽可能讲述我在仿真遇到的问题以及解决办法。 1.文章内容介绍 参考文献如下&#xff1a; 这篇文章的复现估计要分为几个部分&#xff0c;电感辨识、电阻辨识、磁链辨识。 文章是以无差拍预测电流…

【MySQL】MySQL主从复制

目录 技术背景数据库架构演变1.单机MySQL数据库的美好年代2.Memcached(缓存)MySQL3.主从复制&#xff1a;读写分离4.垂直拆分业务数据5.分库分表 结论——生产环境的MySQL架构 什么是主从复制作用读写分离一主多从 应用场景原理解析MySQL主从复制工作方式master 记录二进制日志…

提升零售行业竞争力的信息抽取技术应用与实践

一、引言 在当今快速发展的零售行业中&#xff0c;沃尔玛、家乐福等大型连锁超市为消费者提供了丰富的日常食品和日用品。为了进一步提升客户体验和优化库存管理&#xff0c;这些零售巨头纷纷开始探索和应用先进的信息抽取技术。 本文将深入探讨一个成功的信息抽取项目&#…

vue iview 级联选择器遇到的坑

我们PC项目用到的前端技术栈是vue+iview,最近有个需求,要做个级联选择器,并且是懒加载动态加载后端返回的数据。效果如下: 如下图所示,在我们封装的公共组件form-box.vue里有我们级联选择器: 代码如下: <!--级联选择器--><template v-else-if="item.type…

【小白学机器学习9】自己纯手动计算验证,EXCEL的一元线性回归的各种参数值

目录 0 目标 1 构造模型 1.1 构造模型的思路 1.2 具体模型构造的EXCEL公式和过程 2 直接用EXCEL画图&#xff0c;然后生成趋势线的方式进行回归分析 2.1 先选择“观测值Y”的数据&#xff0c;用散点图或者折线图作图 2.2 然后添加趋势线和设置趋势线格式 2.3 生成趋…

IP代理技术革新:探索数据采集的新路径

引言&#xff1a; 随着全球化进程不断加深&#xff0c;网络数据采集在企业决策和市场分析中扮演着愈发重要的角色。然而&#xff0c;地域限制和IP封锁等问题常常给数据采集工作带来了巨大挑战。亿牛云代理服务凭借其强大的网络覆盖和真实住宅IP资源&#xff0c;成为解决这些问…

C++ //练习 10.37 给定一个包含10个元素的vector,将位置3到7之间的元素按逆序拷贝到一个list中。

C Primer&#xff08;第5版&#xff09; 练习 10.37 练习 10.37 给定一个包含10个元素的vector&#xff0c;将位置3到7之间的元素按逆序拷贝到一个list中。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /******************…