MySql性能调优04-[MySql事务与锁机制原理]

MySql事务与锁机制原理

  • 从undo与redo日志,理解事务底层ACID底层原理
  • 事务四大隔离级别
  • 事务底层锁机制和MVCC并发优化机制
    • 串行化底层实现机制
    • 读已提交和可重复读底层实现
      • MVCC机制详解
        • 脏写问题(重要)
        • 读已提交?实现机制
  • BufferPool缓存与redo日志是如何提升事务性能的
    • BufferPool内存结构详解

从undo与redo日志,理解事务底层ACID底层原理

  • 事务特性
  • 原子性:当前事务操作要么同时成功,要么同时失败。原子性由undo log日志来保证。
  • 一致性:使用事务的最终目的,由业务代码正确逻辑保证。(由原子性、隔离性和持久性共同保证)
  • 隔离性:在事务并发执行时,他们内部的操作不能互相干扰。
  • 持久性:一旦提交了事务,它对数据库的改变就应该是永久性的。持久性由redo log日志来保证

事务四大隔离级别

  • 事务隔离级别
    在这里插入图片描述
    InnoDB如何解决脏读、不可重复读和幻读的?
    在InnoDB中,通过MVCC解决脏读和不可重复读,通过MVCC+间隙锁解决幻读的。
    MVCC多版本并发控制机制,Mysql在读已提交和可重复读隔离级别下都实现了MVCC机制。

事务底层锁机制和MVCC并发优化机制

在这里插入图片描述

串行化底层实现机制

串行化底层是加了读锁的

读已提交和可重复读底层实现

在这里插入图片描述

MVCC机制详解

每张表都有trx_id:事务id,roll_pointer:回滚指针,指向undolog表

  • 在insert的时候,undolog表会存一条delete语句:delete t where t.id=dddd
  • 在update的时候用到了copy on writer机制(写时复制,写的复制一份副本),undolog表会存一条之前的数据,读写分离,不阻塞,写的时候在副本的基础上写,读还是读的老数据,这个就作为历史数据存到undo log表里

在这里插入图片描述
在这里插入图片描述
可重复读实现机制:多个版本的undlolog日志链,查询的时候在第一次读的时候会跟查询到的那条数据有一个绑定关系,来实现一个可重复读以后再读的时候就读绑定的那条数据
怎么去绑定的?
在这里插入图片描述
啥叫读写不阻塞?
比如一条数据,读写同时进来,写的时候会复制一份副本,在副本的基础上来进行写,而读读的是老的原数据,这个时候读写分离同时进行。

脏写问题(重要)

现在还有一个问题?如果绑定是老的数据用老的数据去做操作,但是库里已经更新成了新的数据比如事务要操作余额字段 版本绑定的500,新版本的数据是1000,现在用500做操作,给余额加200,此时余额变成700,此时去更新这条数据。把1000给覆盖掉了 这就是脏写。脏写的问题该如何解决??

  • 可以使用乐观锁来解决,加个版本号
    更新的时候,如果发现版本号不一致就重新读一条来进行更新操作,如果还不相等,那就继续读新数据来更新
读已提交?实现机制

也是MVCC,每次读都读到多个版本中最后那个已经提交的数据

BufferPool缓存与redo日志是如何提升事务性能的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

BufferPool内存结构详解

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

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

相关文章

海康相机GrabImage

#include <stdio.h> #include <Windows.h> #include <process.h> #include <conio.h> #include "MvCameraControl.h"bool g_bExit false;// ch:等待按键输入 | en:Wait for key press void WaitForKeyPress(void) {while(!_kbhit()){Sleep(…

6.S081的Lab学习——Lab11: Network

文章目录 前言Network提示&#xff1a;实现e1000_transmit的一些提示&#xff1a;实现e1000_recv的一些提示&#xff1a; 解析 总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招。打算尝试6.S081&#xff0c;将它的Lab逐一实现&#xff0c;并记录期间心酸历程。 代码下…

STM32MP135裸机编程:支持内存非对齐访问

0 前言 使用stm32官方可视化初始化代码生成工具STM32CubeMX生成的工程GCC编译选项默认不支持非对齐访问&#xff0c;在我们进行非对齐的访问时就会进入数据异常中断DAbt中。为了解决这一问题&#xff0c;我们需要在GCC编译选项中加上一处配置。 1 操作方法 右键STM32CubeIDE…

【Linux】:重定向和缓冲区

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来关于重定向和缓冲区的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精…

Paddle 打包部署

PaddleOCR 打包部署exe 心酸历程 PaddleOCR部署exe模式PaddleOCR安装到本地(稍后有时间再写)PaddleOCR打包过程异常问题记录&#xff01;&#xff01;&#xff01;&#xff01;No such file or directory: D:\\py_project\\paddleOCR\\dist\\paddleOCR\\_internal\\paddleocr\\…

Excel自动化工具-工作簿中sheet页合并-可自行选择需要处理的工作簿

宝子们可以选择直接下载文章顶部资源包【Excel自动化工具-工作簿中sheet页合并.xlsm】&#xff08;或者在博主的资源里下载&#xff09;&#xff0c;该资源功能为&#xff1a;合并sheet页 或者也可以自己编写宏代码&#xff0c;文章最后有附上源代码 没有office excel 的宝子…

linux之find指令基础

目录 前言一、find .二、find xxx -name "*.c"三、组合查找文件名四、find . -type f五、find . -maxdepth 2 -type f六、find . -type f -perm 777七、find . -type f -name "*.txt" ! -perm 777八、借助-exec命令参考链接 前言 testfind下 check1.c ch…

《乡土中国》重新审视自己的故乡,再出发

《乡土中国》重新审视自己的故乡&#xff0c;再出发 费孝通(1910—2005)&#xff0c;中国社会学家、人类学家。被誉为中国社会学和人类学的奠基人之一。江苏吴江人。1980年获国际应用人类学会马林诺斯基荣誉奖。1981年获英国皇家人类学会赫胥黎奖章。代表作有《乡土中国》《江村…

【周末闲谈】Stable Diffusion会魔法的绘画师

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言Stable Diffusion介绍 使用ComfyUI 和 WebUIComfyUIWebUI 配置需求 Stable Diffusion资源分享吐司AiAUTOMATIC1111Civitai绘世整合包Nenly同学stability.ai 前言 在很早之前&…

【数学建模】2005建模A题:长江水质综合评价与预测

数据的无量纲化处理 数据的无量纲化处理是一种统计学中的预处理技术&#xff0c;主要用于消除数据中的量纲影响&#xff0c;使得不同单位或量级的指标可以相互比较和结合。无量纲化通过调整数据的范围或尺度&#xff0c;使得数据集中的每个特征或变量处于相似的数值区间内。以…

【React】Google 账号之个性化一键登录按钮功能

“使用 Google 帐号登录”功能可快速管理网站上的用户身份验证。用户登录 Google 账号、表示同意&#xff0c;并安全地与平台共享其个人基础资料信息。 官方文档&#xff1a;链接 一、获取 Google API 客户端 ID 打开 Google API 控制台 中的凭据页面 创建或选择 Google API 项…

网络分层及通信过程

网络分层体系 主流的理论体系中主要包含三种网络分层模型&#xff0c;即ISO的七层网络模型、TCP/IP的四层网络模型以及结合两种模型优点的五层网络模型&#xff0c;关于网络模型&#xff0c;主要起到对网络体系的一个整体认识&#xff0c;作为网络知识学习的开始&#xff0c;这…

【并发编程】进程 线程 协程

进程&#xff08;Process&#xff09;、线程&#xff08;Thread&#xff09;和协程&#xff08;Coroutine&#xff09;构成了计算机科学中实现任务并发执行的三种核心抽象机制。通常&#xff0c;为了提高程序的执行效率&#xff0c;开发者会根据应用场景和性能需求&#xff0c;…

Linux对文件访问的基本权限

文件权限控制对文件的访问。 有三种权限类别可应用&#xff1a;读取、写入和执行。 权限对文件和目录的影响&#xff1a; 权限 对文件的影响 对目录的影响 r读取 可以读取文件的内容 可以列出目录的内容 w写入 可以更改文件的内容 可以创建或删除目录中任一文件 x执行…

对照ui图进行大屏幕适配,echerts适配

1.先找到ui图&#xff0c;我这边是1920*1080的屏幕进行的设计 2.在界面找到跟样式的字体大小&#xff0c;进行设置&#xff0c;一般ui设置字体大小便可 3.在js中写入原生js代码 function adapter() {//获取布局视口宽度&#xff0c;布局视口设备横向独立像素值const dpWidth…

【算法专题】快速排序

1. 颜色分类 75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 依据题意&#xff0c;我们需要把只包含0、1、2的数组划分为三个部分&#xff0c;事实上&#xff0c;在我们前面学习过的【算法专题】双指针算法-CSDN博客中&#xff0c;有一道题叫做移动零&#xff0c;题目要…

JAVA NIO组件之Buffer详解

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

Highlight.js示例

图例 代码在图片后面 点赞❤️关注&#x1f64f;收藏⭐️ 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"…

7.14实训

当我开始学习各种杀毒软件时&#xff0c;我逐渐意识到信息安全在现代社会中的重要性和复杂性。杀毒软件不仅仅是简单的安装和运行&#xff0c;它涉及到广泛的知识领域&#xff0c;包括计算机网络、恶意软件分析、加密技术等等。在这个过程中&#xff0c;我收获了许多宝贵的经验…

代码随想录算法训练营第30天|LeetCode 452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间

1. LeetCode 452. 用最少数量的箭引爆气球 题目链接&#xff1a;https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/description/ 文章链接&#xff1a;https://programmercarl.com/0452.用最少数量的箭引爆气球.html 视频链接&#xff1a;https://www…