mysql 的读取流程 bufferpool redolog undolog mvcc流程原理 lru链表

MySQL运行原理 MySQL 是一个开源的关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司旗下产品。MySQL是一个:🛠️(RDBMS)📊 用表格形式存储数据(就像Excel,但强大百万倍)🔍 使用SQL语言与它对话(比如🚀 支持每秒处理数万次查询数据页是什么?MYSQL将数据组成类似EXcel的表的样子,EXcel在磁盘上是个xls文件,MYSQL的数据表也类似,是个ibd后缀的文件,.ibdInnoDB 默认使用。 阅读详情

MySQL的读取流程涉及多个组件,其中最重要的是Buffer Pool,但Redo Log、Undo Log、MVCC(多版本并发控制)也起着重要作用,而LRU链表和空闲链表则与Buffer Pool的内存管理有关。以下是MySQL读取流程的描述以及这些组件和原理的简要概述:

读取流程

  1. 客户端请求:客户端发送一个SELECT查询请求到MySQL服务器。

  2. 查询解析与优化:MySQL服务器解析查询语句,生成一个查询计划,优化器会基于统计信息和其他因素来优化这个计划。

  3. 检查Buffer Pool:

    • 数据缓存检查:优化后的查询计划会检查所需的数据页是否在Buffer Pool中。
    • 直接读取:如果数据页在Buffer Pool中(热数据),则直接从内存中读取数据,避免了磁盘I/O。
  4. 不在Buffer Pool中的情况:

    • 磁盘读取:如果数据页不在Buffer Pool中(冷数据),则需要从磁盘上读取数据页到Buffer Pool中。
    • LRU管理:如果Buffer Pool空间不足,会根据LRU算法淘汰最少使用的数据页。
  5. 行级锁检查:对于需要读取的行,MySQL会检查是否有行级锁,如果有,则可能需要等待锁释放。

  6. MVCC检查:

    • 版本检查:根据事务的隔离级别和当前时间戳,MVCC会检查数据行的版本,确保事务读取到的是正确的数据版本。
    • Undo Log使用:如果需要读取旧版本的数据(如非锁定读),则通过Undo Log来读取。
  7. 构建结果集:根据查询条件,从Buffer Pool或直接从磁盘读取的数据被用来构建结果集。

  8. 返回结果:结果集被返回给客户端。

相关组件和原理

Buffer Pool
  • 作用:缓存数据和索引,加速数据访问。
  • LRU链表:管理Buffer Pool中的数据页,当需要淘汰数据页时,选择最近最少使用的数据页。
  • 空闲链表:管理Buffer Pool中的空闲空间,当有新的数据页需要加载时,可以从空闲链表中分配空间。
Redo Log
  • 作用:保证事务的持久性,记录数据修改操作。
  • 读取不涉及:读取操作通常不涉及Redo Log,它主要用于写入操作和崩溃恢复。
Undo Log
  • 作用:支持MVCC,记录数据修改前的旧版本,用于读取旧版本的数据或回滚事务。
  • 与MVCC协同工作:在读取操作中,如果需要读取旧版本的数据,则通过Undo Log来实现。
MVCC
  • 原理:通过保存数据的多个版本,允许多个事务同时读取同一行数据,而不会相互干扰。
  • 在读取中的作用:确保每个事务都能读取到一致的数据视图,即使数据正在被其他事务修改。

在整个读取流程中,Buffer Pool是提高性能的关键,因为它减少了磁盘I/O操作。而Redo Log、Undo Log和MVCC则保证了数据的持久性、一致性和并发性。LRU链表和空闲链表则帮助有效地管理Buffer Pool中的内存空间。

On the convergence of FedAvg on non-iid data 阅读详情

相关推荐

VLSI数字信号处理系统——第九章滤波器和变换中的算法强度缩减

[课程学习] VLSI数字信号处理系统——第九章滤波器和变换中的算法强度缩减

夏风喃喃的博客 1604

不会吧,不会吧,还有人不知道 binlog ?

前言 上篇阿星详细聊了 redo log(重做日志),但是在MySQL数据库中还有一种二进制日志叫binlog(归档日志)。 redo log它是物理日志,记录内容是“在某个数据页上做了什么修改”,属于InnoDB存储引擎。 而binlog是逻辑日志,记录内容是语句的原始逻辑,类似于“给ID=2这一行的c字段加1”,属于MySQL Server层。 binlog 不管用什么存储引擎,只要发生了表数据更新,都会产生binlog日志。 那binlog到底是用来干嘛的? 可以说MySQL数据库的数据备份、主备、

程序猿阿星 557

脑机接口(BCI)从原理到开发实战 10|脑控外设:用脑电波控制机械臂/游戏

摘要: 脑机接口(BCI)的“最后一公里”是将分类结果转化为实际动作的关键环节。本文介绍如何通过指令映射、硬件通信和执行反馈实现脑控外设,包括离散/连续控制策略、防抖处理及串口/蓝牙通信方法。通过两个实战案例(运动想象控制机械臂抓取、P300/SSVEP控制游戏)和完整项目(OpenBCI控制小车),演示了从分类标签到设备动作的完整流程,重点涵盖指令生成算法(多数投票)、Python与Arduino的串口通信集成,为BCI系统落地提供实用解决方案。(149字)

小明的博客 765

聊聊Buffer Pool缓存机制整个流程

目录 1.更新数据的流程 1.1执行流程 1.2 binlog日志 2.几个链表的使用 2.确实没有缓存数据了怎么办? 1.更新数据的流程 1.1执行流程 例如一个更新数据,整个流程如上图所示: 1.从磁盘加载数据到buffer pool,会先去判断要更新的数据所在数据页是否已经被加载到了,如果已经被加载到了buffer pool中的数据页就直接使用。 2.写入数据的旧值到undo log日志中,用于事务回滚。 3.更新buffer pool数据页中内存数据。 4.写入内

ChinaCR07的博客 779

STM32N6:MCU+NPU架构如何重塑边缘AI部署新范式

STM32N6作为业界首款MCU+NPU架构的通用微控制器,通过集成600 GOPS算力的NPU与800MHz Cortex-M55内核,实现了边缘AI部署的革命性突破。该方案在工业视觉和智能家居等场景中,以超低功耗和成本提供实时AI处理能力,性能较传统MCU提升超100倍,重塑了边缘智能设备的设计范式。

g8f9d0s1a2的博客 1291

用PY32F003F18的PWM互补输出驱动无刷电机,保姆级配置流程(含代码)

本文详细介绍了如何利用PY32F003F18微控制器的TIM1定时器配置PWM互补输出功能来驱动三相无刷电机,涵盖硬件设计、代码实现及六步换相算法。通过保姆级配置流程和实用代码示例,帮助开发者快速掌握无刷电机驱动技术,适用于工业自动化和消费电子等领域。

weixin_26905487的博客 378

MySQL的三大日志

mysql的日志

weixin_51453935的博客 216

麒麟V10 SP3国产化环境部署MySQL 8.0全流程实战

本文详细介绍了在国产化操作系统麒麟V10 SP3上部署MySQL 8.0的全流程实战指南。从环境准备、冲突排查到安装包处理、服务配置与安全加固,提供了详细的命令和技巧,帮助用户顺利完成MySQL 8.0的部署与优化,适用于国产化环境下的数据库应用。

weixin_29231027的博客 266

Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer

文章目录Buffer Pool概念几个问题redo logBin logUndo logChange Buffer Buffer Pool 概念 上面我们了解了InnoDB存储引擎页的概念,但我们并不知道页在磁盘中是如何存储,在内存中又是如何存储? Buffer Pool是内存中的一块区域,当我们想查询一条数据,首先会在磁盘中找到存放这条数据的某一页。 然后将这一页的数据复制到Buffer Pool中 如果接下来另一个客户端也是查询这条数据的话,那么就会直接在Buffer Pool中获取。 如果是修改语

qq_44027353的博客 1195

数字IC后端笔记-libcell命名规则与标准单元库介绍

ND3D1BWP13T40P140HVTND3D1BWP13T40P140HVTTSMC两种工艺,Metalization Stack的截面示意图:还有一层AP用来走RDL,RDL这层是最厚的一层,一般用于连接IO的bump,信号线基本上不会用这层绕线。

sinat_41774721的博客 2464

ZooKeeper 实战:使用 Docker Compose 部署 ZooKeeper 集群

ZooKeeper是一个开源的分布式协调服务,用于管理大型分布式系统中的数据。它由Apache软件基金会提供,最初是Hadoop的一个子项目,但后来发展成为一个独立的顶级项目。ZooKeeper提供的一致性协调服务对于构建分布式应用和服务非常重要,特别是在需要精确的领导选举、配置管理、命名服务、分布式同步和提供分布式锁等功能时。

SmartSi 1541

Redo Log 的深入了解

Redo Log 的深入了解

DrMickeys的博客 1572

AI辅助Android开发:从传统到智能化的技术演进

AI辅助开发的核心在于利用算法模型自动化或优化传统任务。在Android开发中,AI可应用于需求分析、设计、编码、测试和维护各阶段。需求分析:AI工具如基于NLP的模型(例如GPT系列)可解析用户需求文档,自动生成用户故事和原型设计。假设产品需求为“开发一个航班查询应用”,AI能提取关键词,输出UML图或伪代码。代码生成:使用AI代码助手(如GitHub Copilot),工程师输入自然语言描述,AI生成Java/Kotlin代码片段。

郑伟强dev的专栏 137

【MySQL性能优化】- 一文轻松学会BufferPool缓存机制

本文主要介绍了MySQL中InnoDB存储引擎的Buffer Pool缓存机制及其与日志文件的协同工作原理。

qq_43843951的博客 1185

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

MySQL 事务篇

​

qq_36010886的博客 177

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Mysql原理-日志

那么,执行一条 update 语句,期间发生了什么?客户端先通过连接器建立连接,连接器自会判断用户身份;因为这是一条 update 语句,所以不需要经过查询缓存,但是表上有更新语句,是会把整个表的查询缓存清空的,所以说查询缓存很鸡肋,在 MySQL 8.0 就被移除这个功能了;解析器会通过词法分析识别出关键字 update,表名等等,构建出语法树,接着还会做语法分析,判断输入的语句是否符合 MySQL 语法;预处理器会判断表和字段是否存在;

dingxiao123的博客 218

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MYSQL 日志

MSQL 有三大日志,binlog, redolong ,undo log ,binlog ,记录的是语句,主要用来做集群数据同步的,像主从复制之间的一些数据同步。redolog ,是innodm独有的日志,记录了数据的修改,保证了持久性,在数据库崩溃的时候能够恢复数据。undo log , 是数据库的版本链,能够回退日志,保证了原子性,同时配置MVCC机制,实现了多版本并发控制。

m0_60693634的博客 1531

Mysql数据库架构介绍

一、Mysql单例数据库架构 1、Mysql体系介绍 2、SQL运行过程 3、InnoDB内存和存储结构 4、TableSpace 5、Page 6、InnoDB线程模型 7、备份机制 二、Mysql数据复制 1、Mysql数据复制原理 2、Mysql复制架构 3、Mysql复制模式 三、Mysql高可用及进阶 1、Mysql高可用原理 2、Keepalived架构 3、MHA架构 4、MGR架构...

qq_39234967的博客 9200

MySQL的BufferPool和RedoLog

MySQL中的BufferPoll的作用,RedoLog的作用,MySQL是如何保证数据持久化的,顺序IO与随机IO

a141210104的专栏 1259

Mysql-Buffer Pool和Redo Log详解

1. 什么是Buffer Pool? 缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。 2. Buffer Pool的内存淘汰策略 冷热分区的LRU策略 LRU链表会被拆分成为两部分,一部分为热数据,一部分为冷数据。冷数据占比 3/8,热数据5/8。 数据页第一次加载进来,放在LRU链表的什么地方? 放在冷数据区域的头部 冷数据区域的缓存页什么时候放入热数据区域? MySQL设定了一个规则,在 innodb_old_blocks_time 参数中,默认

huangqingfeng的博客 1139

Mysql - innodb引擎的BufferPool 和 redo log日志的原理

在InnoDB中,bufferpool里面的dirtypage一方面可以加快数据处理速度,同时也会造成数据的不一致(RAMvsDISK)。本文介绍了dirtypage是如何产生,以及InnoDB如何利用redolog如何消除dirtypage产生的数据不一致。 一、原理 当事务(Transaction)需要修改某条记录(row)时,InnoDB需要将该数据所在的page(一个page中有多...

test的博客 1747

「一文搞懂」MySQL缓冲池(buffer pool)

本章主要分享MySQL缓冲池原理。

南秋同学的博客 2538

Innodb下修改事务工作流程(buffer pool、redo log、undolog、binlog)

undolog的写入最开始写到内存中的,然后由1个后台线程定时刷新到磁盘中的。Innodb优先从Buffer Pool中查询该条记录,如果没有就从磁盘文件中缓存到Buffer Pool中。binlog中记录的信息包括:事务开始的时间、数据库名、表名、事务ID、SQL语句等。提交事务后,后台异步线程将Buffer Pool写入磁盘中,这里会有一定的延时。同步修改到redo log buffer,此时并没有写入磁盘中。更新Buffer pool中的脏页,此时并没有写入磁盘中。4、写入redo log日志。

农夫三拳 384

MySQL的写入流程 Buffer Pool、Redo Log、Undo Log、Binlog、脏页链表

在整个写入流程中,Buffer Pool、Redo Log、Undo Log和Binlog都起着至关重要的作用。Buffer Pool提供了快速的内存访问,Redo Log保证了数据的持久性,Undo Log支持事务回滚和MVCC,而Binlog则用于复制和恢复。MySQL的写入流程涉及多个组件和步骤,其中涉及到Buffer Pool、Redo Log、Undo Log、Binlog以及脏页链表等。:如果这是一个需要写入数据的事务,则开始一个新的事务。:数据最终写入到磁盘上,事务完成。

vmaps的博客 903

通俗易懂讲redolog和undolog

是主内存的一个空间,专门为数据库的增删改开辟使用的空间,会用于存储增删改的数据(如果在读取数据时,先读取bufferpool的缓存区,如果数据没有再从磁盘中加载)bufferpool的数据会以一定的时间频率来刷盘到磁盘空间,进行数据的持久化,从而减少磁盘IO,提升效率。回滚日志,主要记录数据修改前的信息,undolog是实现回滚和MVCC的主要依据,和redolog记录数据的物理日志不同,redolog记录的是数据的逻辑日志。可以实现数据库事务的一致性和原子性。可以实现数据库事务的持久性。

m0_69874463的博客 371

Mysql学习笔记(二) buffer poll、redo log 、bin log

本文将介绍MySQL数据库的三个核心概念:buffer pool、redo log和binlog。buffer pool是通过缓存数据来提高数据库性能的重要组件,redo log确保在出现错误时恢复并保护数据,而binlog记录所有的数据库更改以备份和复制。通过了解和实践这些组件,可以优化MySQL数据库的性能和可靠性。本文主要从个人理解的角度介绍Mysql的buffer poll、redo log 、bin log。如有错误或疑问,请各位大佬前辈们指正。[参考文档]:MySql45讲。

error044的博客 651
上一篇: MySQL的写入流程 Buffer Pool、Redo Log、Undo Log、Binlog、脏页链表
下一篇: InnoDB和MyISAM的区别 聚簇索引与非聚簇索引 B+树与B树
vmaps
博客等级 码龄17年 424粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值