其他分享
首页 > 其他分享> > InnoDB体系架构

InnoDB体系架构

作者:互联网

1、InnoDB体系架构

下图简单显示了InnoDB的存储引擎的体系架构,可以认为这些内存块组成了一个大的内存池,负责如下工作

InnoDB存储引擎体系架构
2、LRU List、Free List 和Flush List

我们知道缓冲池是一个很大的内存结构,其中存放各种类型的页,那么InnoDB存储引擎是如何管理这些内存区域的呢?

数据库中的缓冲池是通过LRU(Latest Recent Used,最近最少使用)算法来管理的,即最频繁使用的页在LRU列表的前端,而最少使用的页在LRU列表的尾端,当缓冲池不能存放读取到最新的页时,将首先释放LRU列表中尾端的页。

在InnoDB储存引擎中,缓冲池中页的大小默认为16KB,同样使用LRU算法对缓冲池进行管理,不同的是InnoDB存储引擎对传统的LRU算法做了一些优化,在InnoDB的存储引擎中,LR列表中还加入了midpoint位置,新读取到的页,虽然是最新访问的页,但并不是直接放入到LRU列表的首部,而是放入到LRU列表中的midpoint位置

3、重做日志缓冲

InnoDB存储引擎的内存区域除了有缓冲池外,还有重做日志缓冲(redo log buffer),InnoDB存储引擎首先将重做日志信息放入到缓冲区,然后按一定频率将其刷新到重做日志文件,该值可有配置参数innodb_log_buffer_size控制

mysql> show variables like 'innodb_log_buffer_size';
+------------------------+----------+
| Variable_name          | Value    |
+------------------------+----------+
| innodb_log_buffer_size | 16777216 |
+------------------------+----------+
1 row in set (0.00 sec)

重做日志在以下情况下会将重做日志缓冲中的内容刷新到外部磁盘的重做日志文件中去

4、额外的内存池

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

2、Checkpoint 技术

标签:体系,架构,缓冲,池中,InnoDB,内存,innodb,日志
来源: https://www.cnblogs.com/yangblogFamily/p/16371125.html