SQL语句是怎样写入磁盘的?

SQL语句执行后,数据首先存储在InnoDB的Buffer Pool内存中,然后通过脏页落盘过程写入磁盘。这个过程涉及先写日志(redo log)再更新数据,确保数据持久性。日志先存于redo log Buffer,达到一定数量后批量写入磁盘。脏页写入磁盘遵循checkpoint机制,包括Buffer Pool满或redo log文件满的情况。此外,写入磁盘前的Double Check机制用于验证数据正确性。
摘要由CSDN通过智能技术生成

SQL语句是怎样写入磁盘的?
data数据在本地的存储形式
data从存储引擎层写入磁盘过程
我们都知道SQL语句是存储存储在磁盘上的,但是执行SQL语句后的数据是先存在InnoDB存储引擎的内存中的,那它究竟是怎么记录到磁盘中的呢?要想了解这个,我们首先要知道SQL数据在本地到底是什么类型的文件进行存储。

data数据在本地的存储形式
在本地mysql对应库中,data数据实际上是以ibd文件存储,其中包括数据页和索引页(页是磁盘和内存交互的最小单位,一页大小是16k,页也就是B+树的叶子结点)。
data数据在内存中对应的空间为Buffer Pool,其中也包括数据页和索引页部分。

data从存储引擎层写入磁盘过程在这里插入图片描述
写数据到磁盘的过程也被称为脏页落盘,之所以称之为脏页是因为此时内存中的数据和磁盘上的数据还不一致。

首先,SQL语句对数据页的改动将储存在InnoDB的内存中,也就是Buffer Pool中。

接下来是先写日志,再更新数据到磁盘。之所以如此,和数据在磁盘上的存储状态也有关系,日志在磁盘上往往是存储在一块连续区域,采用顺序IO即可,而数据在磁盘上往往是分散的,在读取的时候需要进行寻址等操作,属于随机IO,效率会比较低,因此先进行日志存储,再写入数据,这样对于数据意外丢失时的恢复,有着更高的效率。

在执行完一条命令后,为了保证持久性,要先写日志,但是并不能每条日志都立即追加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值