深入理解Mysql

BufferPool和Changebuffer是如何加快读写速度的?

BufferPool

在Mysql启动的时候 Mysql会申请连续的空间来存储BufferPool

每个页16kb 当控制块不足以存储信息的时候就会向后申请一个新的页

每个控制块都对应了一个缓存页 控制块占chunk的百分之5左右

LRU链表

Changebuffer

非唯一索引的变更并不会每次都直接进行磁盘IO 而是会先写入Changebuffer 这样如果需要读操作 就不用再去磁盘中io 减少了一次io 提高读写效率

总结

为了优化Mysql的读写效率 在内存中会有一块叫BufferPool 的空间 这里面会存储很多chunk

每个chunk 会存储许多控制块 每个控制块会对应一块缓存页

而为了维护缓存页的状态 就引入了Free链表Flush链表 这两个链表存储的都是缓存页对应的控制块

Free链表: 用来存储有那些控制块是空闲的 就是没有写入数据 (可用的)

Flush链表:用来存储BufferPool中哪些缓存页是有数据的

脏页:缓存页中和磁盘数据不一致的就被称为脏页 会定期刷盘来同步缓存

Changebuffer:修改数据的时候会先写入BufferPool中的Changebuffer 来提高读写效率

预读:每次读取磁盘的时候会认为这部分的内容可能会被连续访问 于是就连续读取一部分数据页到缓存中

LRU链表分为新生代和老年代 通过维护这两块区域 来实现冷热数据分离 避免全表扫描导致热点数据被覆盖

Mysql中的索引

索引下推

顾名思义 将索引从Server层下推到索引层去进行条件的过滤 避免多次回表

举个例子

比如模糊查询姓张的 age=18

那会先查询出姓张的 id=1/4 得到主键后回表根据1、4 在得到姓张的

再到Server层 对age=18进行过滤

索引下推

可以直接将条件下方到索引层

可以直接通过两个条件过滤数据行 然后回表查询

这样下来就减少了一次回表查询

页分裂的原因

假设每个Page页只能存放3条数据 当有一个主键为4的数据想要插入的时候

此时为了满足下一个数据页的主键大于上一个页的主键的约定:必须进行数据的移动 5右移 3插入

数据移动造成开销

聚簇索引

联合索引

自适应哈希索引

可以理解为索引的索引 这是Innodb自己创建的

当缓存中的数据经常被访问的时候 innodb会创建AHI 来提高索引的效率

通过O1 HashKV Key 存储热点数据 Value存储位置

在更新数据的时候BufferPool RedologBuffer 和三大日志会发生什么

当一个Update语句发生时:

1.Innodb会从磁盘中读取中对应的数据页到BufferPool 然后对BufferPool中的数据进行修改

2.同时将旧的数据写入Undolog方便数据进行回滚操作 以及配合MVCC进行多版本并发控制

3.然后将数据写入redologbuffer 为机器宕机后恢复数据做兜底操作

Redolog有自己的刷盘策略

1.延迟写 2.实时写 延时刷 3.实时写实时刷

当redolog刷盘后 此时如果宕机 但是事务还没提交 就可以通过redolog(记录的是物理数据)恢复

同时还会标记Prepare状态(两阶段提交)

4.同时也会写binlog (记录的是逻辑日志) 并且把redolog中的状态改为commit

Mysql架构

这也是innodb区别于其他存储引擎特有的支持事务的原因对吗 持久性 原子性

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

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

相关文章

Python核心编程深度解析:作用域、递归与匿名函数的工程实践

引言 Python作为现代编程语言的代表,其作用域管理、递归算法和匿名函数机制是构建高质量代码的核心要素。本文基于Python 3.11环境,结合工业级开发实践,深入探讨变量作用域的内在逻辑、递归算法的优化策略以及匿名函数的高效应用&#xff0c…

《用MATLAB玩转游戏开发》贪吃蛇的百变玩法:从命令行到AI对战

《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-🐍 贪吃蛇的百变玩法:从命令行到AI对战 🎮 欢迎来到这篇MATLAB贪吃蛇编程全攻略!本文将带你从零开始,一步步…

Android平台FFmpeg音视频开发深度指南

一、FFmpeg在Android开发中的核心价值 FFmpeg作为业界领先的多媒体处理框架,在Android音视频开发中扮演着至关重要的角色。它提供了: 跨平台支持:统一的API处理各种音视频格式完整功能链:从解码、编码到滤镜处理的全套解决方案灵…

AI大模型驱动的智能座舱研发体系重构

随着AI大模型(如LLM、多模态模型)的快速发展,传统智能座舱研发流程面临巨大挑战。传统座舱研发以需求驱动、功能固定、架构封闭为特点,而AI大模型的引入使得座舱系统向自主决策、动态适应、持续进化的方向发展。 因此思考并提出一…

Day20 常见降维算法分析

一、常见的降维算法 LDA线性判别PCA主成分分析t-sne降维 二、降维算法原理 2.1 LDA 线性判别 原理 :LDA(Linear Discriminant Analysis)线性判别分析是一种有监督的降维方法。它的目标是找到一个投影方向,使得不同类别的数据在…

Python----机器学习(模型评估:准确率、损失函数值、精确度、召回率、F1分数、混淆矩阵、ROC曲线和AUC值、Top-k精度)

一、模型评估 1. 准确率(Accuracy):这是最基本的评估指标之一,表示模型在测试集上正确 分类样本的比例。对于分类任务而言,准确率是衡量模型性能的直观标准。 2. 损失函数值(Loss)&#xff1…

cdn 是什么?

内容分发网络,Content Delivery Network 介绍 CDN(Content Delivery Network)是一种将内容分发到靠近用户的边缘服务器,以加速访问速度、减少延迟、降低源站压力的网络系统。 CDN 把网站的静态资源(如 HTML、JS、CSS、…

BUCK基本原理学习总结-20250509

一、电感伏秒平衡特性 处于稳定状态的电感,开关导通时间(电流上升段)的伏秒数须与开关关断(电流下降段)时的伏秒数在数值上相等,尽管两者符号相反。这也表示,绘出电感电压对时间的曲线,导通时段曲线的面积必须等于关断时段曲线的面积。 二、BUCK的基本概念和原理 基…

【K8S系列】Kubernetes常用 命令

以下为的 Kubernetes 超全常用命令文档,涵盖集群管理、资源操作、调试排错等核心场景,结合示例与解析, 高效运维 Kubernetes 环境。 一、集群与节点管理 1. 集群信息查看 查看集群基本信息kubectl cluster-info # 显示API Server、DNS等核…

【Django】REST 常用类

ModelSerializer serializers.ModelSerializer 是 Django REST framework(DRF)里的一个强大工具,它能极大简化序列化和反序列化 Django 模型实例的流程。下面从多个方面详细介绍它: 1. 基本概念 序列化是把 Django 模型实例转化…

GuassDB如何创建兼容MySQL语法的数据库

GaussDB简介 GaussDB是由华为推出的一款全面支持OLTP和OLAP的分布式关系型数据库管理系统。它采用了分布式架构和高可靠性设计,可以满足大规模数据存储和处理的需求。GaussDB具有高性能、高可靠性和可扩展性等特点,适用于各种复杂的业务场景&#xff0c…

【无标题】I/O复用(epoll)三者区别▲

一、SOCKET-IO复用技术 定义:SOCKET - IO复用技术是一种高效处理多个套接字(socket)的手段,能让单个线程同时监听多个文件描述符(如套接字)上的I/O事件(像可读、可写、异常)&#x…

spring中的@Qualifier注解详解

1. 核心作用 Qualifier是Spring框架中用于解决依赖注入歧义性的关键注解。当容器中存在多个相同类型的Bean时,Autowired默认按类型自动装配会抛出NoUniqueBeanDefinitionException异常,此时通过Qualifier指定Bean的唯一标识符(名称或自定义限…

Python爬虫实战:获取文学网站四大名著并保存到本地

一、引言 1.1 研究背景 中国古典四大名著承载着深厚的文化底蕴,是中华民族的宝贵精神财富。在互联网时代,网络文学资源虽丰富多样,但存在分散、质量参差不齐等问题 。部分文学网站存在访问限制、资源缺失等情况,用户难以便捷获取完整、高质量的经典著作内容。开发专业的爬…

【一】浏览器的copy as fetch和copy as bash的区别

浏览器的copy as fetch和copy as bash的区别 位置:devTools->network->请求列表右键 copy as fetch fetch("https://www.kuaishou.com/graphql", {"headers": {"accept": "*/*","accept-language": &qu…

渠道销售简历模板范文

模板信息 简历范文名称:渠道销售简历模板范文,所属行业:其他 | 职位,模板编号:KRZ3J3 专业的个人简历模板,逻辑清晰,排版简洁美观,让你的个人简历显得更专业,找到好工作…

Java大数据可视化在城市空气质量监测与污染溯源中的应用:GIS与实时数据流的技术融合

随着城市化进程加速,空气质量监测与污染溯源成为智慧城市建设的核心议题。传统监测手段受限于数据离散性、分析滞后性及可视化能力不足,难以支撑实时决策。2025年4月27日发布的《Java大数据可视化在城市空气质量监测与污染溯源中的应用》一文&#xff0c…

《面向对象程序设计-C++》实验五 虚函数的使用及抽象类

程序片段编程题 1.【问题描述】 基类shape类是一个表示形状的抽象类&#xff0c;area( )为求图形面积的函数。请从shape类派生三角形类(triangle)、圆类&#xff08;circles&#xff09;、并给出具体的求面积函数。注&#xff1a;圆周率取3.14 #include<iostream> #in…

用c语言实现——一个交互式的中序线索二叉树系统,支持用户动态构建、线索化、遍历和查询功能

知识补充&#xff1a;什么是中序线索化 中序遍历是什么 一、代码解释 1.结构体定义 Node 结构体&#xff1a; 成员说明&#xff1a; int data&#xff1a;存储节点的数据值。 struct Node* lchild&#xff1a;该节点的左孩子 struct Node* rchild&#xff1a;该节点的右孩子…

高拟人化客服机器人显著提升用户接受度

高拟人化客服机器人显著提升用户接受度 目录 高拟人化客服机器人显著提升用户接受度思维导图详细总结一、研究背景与目的二、理论基础与变量设计三、研究方法与实验设计四、核心结论与策略建议五、研究局限与未来方向关键问题与答案高拟人化客服机器人显著提升用户接受度,且与…