MySQL学习笔记:基础模型

环境

MacBook Pro

序言

MySQL 技术内幕 InnoDB 存储引擎 第二版

后台线程

MySQL是多线程模型,因此有个多个不同的后台线程,负责处理不同的任务。

  • Master Thread

内存

MySQL学习笔记:基础模型_第1张图片

Q: LRU列表管理哪些页?
A:在书中没有强调,但是我以为应该是数据页和索引页。并且书中有这么一句话:缓冲池中的页还可能会被分配给自适应哈希索引、Lock信息、Insert Buffer等页,而这部分页不需要LRU算法进行维护。

MySQL学习笔记:基础模型_第2张图片

LRU列表用来管理缓存池中页的可用性,Flush列表用来管理将页刷新回磁盘,两者互不影响。

额外的内存池

在 InnnoDB 存储引擎中,对内存的管理是通过一种称为内存堆的方式进行的。
在对一些数据结构本身的内存进行分配时,需要从额外的内存池中进行申请,
当该区域的内存不够时,会从缓存池中进行申请。例如,分配了缓冲池(innodb_buffer_pool),
但是每个缓冲池中的帧缓冲(frame buffer)还有对应的缓冲控制对象(buffer control block),这些对象记录了一个些
诸如LRU、锁、等待等信息,而这个对象的内存需要从额外内存池中申请。
因此,在申请了很大的InnoDB 缓冲池时,也应该考虑相应的增加这个值。

checkpoint

checkpoint所做的事情无外乎是将缓冲池中的脏页刷回到磁盘。

  • LSN Log Sequence Number 其实8字节的数字,单位是字节。
  • 每个页有LSN,重做日志也有LSN,Checkpoint也有LSN

Q:脏页多大触发的checkpoint和LRU触发的checkpoint有什么区别?
A:书中也没有过多的强调,但是我认为,就是控制的维度上的区别。
LRU 触发checkpoint的条件是根据LRU列表中空闲页的数量来确定的。(100)
而Dirty Page too mush checkpoint 触发的条件是脏页占据缓冲池的百分比来确定的。(75%)

Master Thread

Q: 什么是合并插入缓冲?

MySQL学习笔记:基础模型_第3张图片

insert buffer

用于索引;

主键索引一般都是顺序的,在此基础上,如果都是顺序插入,那么速度和效率都是非常高的。
但是因为辅助索引的存在,也就是说存在随机插入的,这样就会导致插入效率变低。

因此有了 insert buffer

当要插入的数据页在缓冲池中时,那就直接插入就行,如果不在那么就插入到insert buffer对象中。

insert buffer需要满足两个条件才可以使用:

① 索引是辅助索引
② 索引不是唯一的

关于第二条 辅助索引不能是唯一的原因是:插入缓冲时,数据库并不会去查找索引页来判断插入的记录的唯一性。
如果去查找了,那么insert buffer就没有意义了。

insert buffer数据结构是B+树;

在最新InnDB引擎中,引入了 change buffer 支持DML操作的缓冲:delete、update、insert都进行缓冲。
分别对应 delete buffer、purge buffer和insert buffer;

关于 update操作的缓冲:可能分为两个过程:
① 将记录标记为已删除
② 真正将记录删除
delete buffer 对应update操作的第一个过程,purge buffer对应update的第二个过程,即真正删除数据。

你可能感兴趣的:(MySQL)