Mysql 与 磁盘交互的过程

news2024/10/2 16:27:21

从之前的Mysql架构可以了解到,Mysql 客户端不是直接和磁盘打交道,我们在客户端输入的sql语句会被发送给服务端,服务端对sql语句进行解析、缓存等操作,然后再交由存储引擎去读写磁盘。这其实是从 C/S 的角度去了解Mysql

站在OS的角度,Mysql 的数据保存在磁盘,本质还是文件IO,Mysql是如何跟内核(OS)打交道的呢?


          目录

1、Mysql 交互模型(站在OS的角度)

(1) Mysql 从磁盘读数据

(2) Mysql 向磁盘写数据

2、Mysql 交互的基本单位

(1) 交互的基本单位(每次IO的数据量)

(2) 为什么IO交互要以page为基本单位?


1、Mysql 交互模型(站在OS的角度)

核心理念说在最前面,Mysql 对数据所做的所有访问,无论是查询,还是增删改,都是在内存中进行的!

(1) Mysql 从磁盘读数据

早在Mysql 启动的时候,Mysql 就会向内存申请一块空间(下面统称“缓存池”)。

每次查询的时候,会预先从磁盘读取一部分相关数据到缓存池。(至于读取多少,详见“Mysql和磁盘交互的基本单位”)

每次增删改的时候,如果缓存池里存在对应的记录,那就直接在已有的记录上改;如果不存在,那就先从磁盘读取到缓存池,然后再改。

(2) Mysql 向磁盘写数据

所有的增删改查都在内存中进行,每次执行sql的时候都会在缓存池中先把数据调整好,然后再刷新到内核缓冲区。内核有自己刷新策略,会定期把数据从内核缓冲区刷新到磁盘

缓存池 ==》内核缓冲区的刷新策略有以下三种选择:

  • 有脏数据就立马刷新(脏数据是内存操作完毕以后的数据)
  • 定期刷新
  • 达到一定的数据量再刷新

内核缓冲区 ==》磁盘的刷新则是定期刷新。如果想要手动刷新内核缓冲区,可以参考系统调用接口 syncfs 。

2、Mysql 交互的基本单位

(1) 交互的基本单位(每次IO的数据量)

上面提到,查询时,Mysql 会读取一部分数据到缓存池,那么问题来了,每次到底读取多少呢?

Mysql和外设交互的基本单位是16KB,即一次IO的数据量就是16KB,站在Mysql的角度,这16KB就是一个page。读数据时,将以page为单位,把相关数据从磁盘读取到内存;写数据也是同理。

(2) 为什么IO交互要以page为基本单位?

假设每次查询都只读取一条记录,多次查询的时候,就要频繁跟数据库(简单理解为磁盘)交互。系统和磁盘的IO是比较费时的,为了提升效率,一般我们要尽量减少系统和磁盘IO的次数。

如果每次查询,我们以page(16KB)读取数据,那就相当于我们可以一次读取几百条记录到缓存池中,即便我们后续要频繁查询数据库,只要是在这个 page 里的内容,我们便无需和磁盘IO

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

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

相关文章

jvm如何判断对象已死?

在堆里面存放着各种各类的Java对象,垃圾收集器在对堆进行垃圾回收时,首要就是判断哪些对象还活着,哪些对象已经死去(即不被任何途径引用的对象)。引用计数器算法:引用计数器算法简单概括为:给对象添加一个引用计数器&a…

Java基础面试题——IO和多线程专题

文章目录1.介绍下进程和线程的关系2.说说Java中实现多线程的几种方法3.如何停止一个正在运行的线程4.介绍下线程中的常用方法1.start方法2.run方法3.getName方法4.优先级5.sleep方法6.isAlive7.join8.yield9.wait和notify/notifyAll5.介绍下线程的生命周期6.为什么wait, notify…

什么?30秒生成一个logo

logo 是徽标或者商标的英文说法。logo 承载着企业的无形资产,是企业综合信息传递的媒介。标志作为企业CIS战略的最主要部分,在企业形象传递过程中,是应用最广泛、出现频率最高,同时也是最关键的元素。通过形象的 logo 可以让消费者…

(考研湖科大教书匠计算机网络)第四章网络层-第三节5:IPv4地址的应用规划

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:定长的子网掩码FLSM二:变长的子网掩码VLSM本节对应视频如下 【计算机网络微课堂(有字幕无背景音乐版)】&#x…

笔记本电脑怎么连接无线网wifi?不同电脑系统的使用教程(2023最新)

现在越多人使用笔记本电脑,在我们的日常生活和工作中是很难离开它的。想要更快速地上网,我们都会选择连接无线网的wifi。有时笔记本电脑无法连接网络,你知道这是什么原因吗?笔记本电脑怎么连接无线网wifi?方法很简单&a…

.NET C# 世界日期格式转换为yyyyMMdd

本文分享了一个按照不同国家的语言生成相应时间格式的案例,有需要做国外网站或者多国语言网站的朋友可以参考一下。 本文在引用 【C# DateTime.ToString根据不同语言生成相应的时间格式】基础上做了一个Demo测试,旨在给更多有需要的人能刷到 官方示例&…

蓝奏云网盘下载链接无法打开的解决方法(详解 全)

🎈前言蓝奏云是一家国内的比较有良心的网盘提供商,提供有不限量的网盘空间,且不限制下载速度,免费用户只限制上传单文件小于100M的文件。算是比较有良心的。而且下载还不用登录才能下载(很多标称免费的网盘均需要下载者…

Python进阶篇(二)-- Django 深入模型

上一节提到了Django是基于MVC架构的Web框架,MVC架构追求的是“模型”和“视图”的解耦合。所谓“模型”说得更直白一些就是数据(的表示),所以通常也被称作“数据模型”。在实际的项目中,数据模型通常通过数据库实现持久…

阿里云部署SpringBoot项目

目录 步骤1:购买服务器(新用户免费试用一个月) 步骤2:查看服务器相关信息 ​编辑 步骤3:设置安全组 步骤4:远程连接 步骤5:使用FinalShell连接阿里云服务器 步骤6:阿里云服务器上安装JDK ​编辑 步骤7…

Inception Transformer

paper链接: https://arxiv.org/abs/2205.12956v2 code链接: https://github.com/sail-sg/iFormer Inception Transformer一、引言二、实现细节三、实验一、分类二、检测三、分割四、消融实验一、引言 最近的研究表明,Transformer具有很强的建立远程依赖关系的能力…

vAPI:一个自托管的OWASP Top 10漏洞API靶场

关于vAPI vAPI是一款针对OWASP Top 10漏洞的练习靶场,vAPI项目是一个故意引入了多种漏洞的可编程接口API,广大研究人员可以利用vAPI来研究和练习OWASP Top 10漏洞。 工具要求 PHP MySQL PostMan Mitmproxy 工具安装 Docker安装 docker-compose up -d…

Jira和Confluence Server版终止支持倒计时365天,企业应对策略汇总

本文对Atlassian最新的Server版政策进行了解读,并给出应对方案;同时我们也将国内热门的替代工具与jira进行了比较细致的对比,以及介绍替换的优惠政策等。今天是2023年2月15日,距离 Atlassian 旗下 Jira、Confluence 等系列产品中国…

互联网的路由选择协议

互联网的路由选择协议 文章目录互联网的路由选择协议路由选择协议的几个概念分层次路由选择协议内部网关协议RIP协议距离向量算法RIP协议的报文格式内部网关协议OSPFOSPF的报文格式✨OSPF的特点外部网关协议BGPBGP的报文格式参考本篇主要讨论的是路由表中的路由是如何得出来的。…

如何获取 openai ChatGPT的key?(图文教学)

我直接对他进行询问 Q:获取chatptp的key A:对不起,作为ChatGPT,我不具有API密钥或访问凭据。我只是一个已经被训练好的自然语言处理模型,通过输入文本来生成回复。您可以在OpenAI的网站上了解有关他们的API和访问凭据…

Gif动态图片怎样在线生成?一招快速完成gif在线制作

Gif表情包作为日常聊天中必备的气氛调和剂,不仅能够更好的表达出自己的内心情绪,还能够缓解聊天的尴尬。那么,要怎么制作gif表情包呢?下面,介绍两个简单的方法,轻松一键就能在线完成gif制作(htt…

Linux安装elasticsearch-head

elasticsearch-head 是一款专门针对于 elasticsearch 的客户端工具,用来展示数据。 elasticsearch-head 是基于 JavaScript 语言编写的,可以使用 Nodejs 下的包管理器 npm 部署。 1 安装Nodejs nodejs下载地址: https://nodejs.org/en/dow…

记一次OOM

1,问题描述: 新上了一版代码之后,上游服务请求我们服务失败,报错:“服务不可用”,发现注册中心上服务掉线,查询日志:发现oom:Java heap space,GC overhead limit exceeded。 容易…

国产电容式触控IC的工作原理及应用

国产电容式触控IC采用CMOS工艺,内建稳压和驱动电路,具有高可靠性、高灵敏度、超低功耗、强稳定性、抗干扰能力强、宽工作电压等方面优点,专为取代光感和传统按键开发而设计。 电容式触控芯片 - CT8225是一款使用电容感应式原理设计的触摸芯片…

Linux_基本指令

新的专栏Linux入门来啦!欢迎各位大佬补充指正!! Linux_基本指令导入文件绝对路径与相对路径隐藏的文件指令ls查看stat查看文件属性cd进入路径mkdir创建目录touch创建文件rm删除man查询手册cp复制mv移动cat查看文件morelessheadtail时间相关的…

redis分布式锁的演变过程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、直接添加Redis缓存二、使用setnx执行抢锁过程三、setnx获取锁+设置过期时间四、引入UUID解决误删锁问题五、引入Lua脚本来做删除六、对递归部分优化进行自旋七、添加自旋次数八、改为重入锁,使…