InnoDB引擎数据处理过程

 

1.Buff poll 内存模型 Bull poll 和硬盘的关系 ,数据查询的属性
mysql数据操作的时候,不是直接操作硬盘的,而是先去Buff poll查看是否有对应数据,有就直接从Buff poll 中获取,然后进行处理。如果Buff poll 中没有,再去硬盘中查询,查询到先放入到Buff poll中,然后在进行数据操作。

Buff poll的空间大小,可控,一般占用磁盘大小60%,Buff poll中的数据是一页一页的。

2.Buff poll 模型机制

Buff poll 操作数据的形式,和三条链表,LRU的弊端

Buff poll的内存模型,关于的数据操作有三条列表控制Buff poll中数据的更新和数据位置。
没有三条列表时:当我新增一条查询数据时,会依次放入到Buff pool中,这时查询最新数据是个问题,然后我对数据进行更新回写到内存中,Buff pool中会产生空页问题,在放入数据需要先确认空页在哪,这样就需要的遍历整个Buff pool空间来确定,遍历效率会慢。

三条链表;Free链表(确认那个页是空闲的)
Flash链表(确认那些数据是被修改过的)
LRU链表(确定那些数据是最近被查询的)

Free链表保存,Buff pool内存页空间位置,当将数据放入到Buff pool的某页中,会删除掉Free链表中此页的位置节点,当再插入数据时,会从剩余节点中选取一个位置。
Flash链表保存,Buff pool内存页中那些数据被修改,当有数据被修改会将修改的数据页插入到,当前链表,当Buff pool满时,会根据从链表进行数据回写到硬盘上,回写之后此链表为空,然后空闲页也会插入到Free链表上
LRU链表保存,那些数据是被新操作的,当数据被操作时会根据数据再链表中的位置判断是否放入到LRU链表的首位置(但数据位置位于热数据的3/4的位置,数据在链表中的位置是不变的,当数据位于热数据的后1/4的位置时数据会插入到LRU链表的首位置,这样也是为了提高效率),当数据Buff pool数据满时,会从尾节点删除数据释放空间。
LRU链表被进行分区,前5/8认为是热数据区,后3/8认为是冷数据区,当数据替换是会先替换冷数据区。 5/8,3/8 ; 3/4 ,1/4; t2-t1<1s认为当前页进行了全盘扫描。
LRU弊端,当全盘扫描时,数据有可能会将整个Buff pool空间沾满,如何处理?当进行全盘扫描时,当前数据页会连续被访问,当访问时间t2-t1>1s时认为是全屏扫描,所以当前数据仍然会在冷数据区,不会再热数据区。数据页替换仍然发生再冷数据区,不会影响热数据区。此机制只是为了规避全盘扫描造成的影响。


mysql执行更新语句过程,更新语句会先更新Buff pool中的数据,然后生成一个redoLog对象,放入到 redolog buff中,当事务提交时redoLog对象会持久化,当数据丢失时,可以根据redoLog进行数据恢复,但是只能恢复最后一次的数据。
后台线程,持久化Buff pool中的页数据,
Buff pool中修改后的数据是通过随机IO写入到磁盘的。redoLog写入数据是顺序写入的。

mysql数据修改:
查看Buff pool中是否有当前页数据:有则直接修改,无则区磁盘中读取到Buff pool中。Buff pool中的数据修改完成,会生成一个redolog 对象放入redolog buff中,当事务提交时会将redolog对象持久化到磁盘,后台线程将Buff pool中的数据持久化到磁盘


redolog,binlog,undolog
redolog:是Innodb特有的机制,主要作用是记录具体某页数据的修改,且只记录最后一次,可以用来做宕机数据恢复。
binlog:是Mysql server自带的机制,主要记录sql语句的逻辑操作,可以用来恢复指定时间的数据。用于主从备份。
undolog:是Innodb特有的机制,进行数据回滚时使用undolog。
数据更新时,redolog先进行写盘,INDOB事务进入perpare状态,binlog写盘,binlog写盘成功,事务进行到提交之前状态,redolog写盘。
redo log是物理日志,是数据页面的修改之后的物理记录,binlog是逻辑日志,可以简单认为记录的就是sql语句。

doublewrite buff:双写缓存机制
主要作用是,防止innodb引擎向磁盘写数据时,数据丢失。Innodb一页数据是16kb,操作系统一页是4kb,这样当存储引擎向操作系统写数据时需要分为四次,当写到一半,操作系统断电,会造成数据丢失。
doublewrite buff就是为了防止这种情况,当存储引擎写数据到doublewrite buff时,断电,当操作系统重启时可以根据readlog重新写入到doublewrite buff中,让后再写入到磁盘中。

 

posted @ 2021-11-29 17:13  爵士灬  阅读(113)  评论(0编辑  收藏  举报