innoDB缓存

本文详细解释了InnoDB数据库的三个关键存储特性:哈希缓存用于内存中数据的高效访问,双写缓冲区确保数据一致性并提高写入速度,而bufferpool则负责内存和磁盘数据的高效交换,包括free链表、flush链表和哈希表的管理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三大存储特点:哈希缓存,双写缓冲区,buffer pool。

1. 磁盘结构

最小的磁盘单元是“页”。

一个页的大小是16k。里面可以存储多个行,如果一行数据太大(超过786字节),会被放在多个页里。

一个区有64个页。一个区的大小相当于就是64*16k=1m。设计区的目的是让相邻的页的物理位置相邻。

一个组有256个区。每个组里有两个特殊的区(在系统空间),innoDB在写入这个组的时候,会先往这两个区写入,这两个区就叫双写缓冲区(double write buffer)。

设置双写缓冲区的目的:

  • 增加数据库的可靠性。防止在写入部分数据的时候断电造成数据损坏。双写缓冲区必须完整写入后,才会把数据写入到数据文件的对应位置。如果写入数据文件的时候断电,在重新启动后,数据库就可以根据双写缓冲区的数据进行恢复。
  • 提高写入磁盘的速度。在写入数据时,先将数据写入双写缓冲区(磁盘,由于这两个区在物理上是连续的,它俩也是紧挨着的,写入是顺序写,速度很快),再将数据写入到数据文件(磁盘,这次可能就是随机写了)的适当位置。

一个段有多个组。一棵B+树一般有3个段,一个叶子节点段,一个非叶子节点段,一个回滚段。

2. buffer pool(缓冲池)

double write buffer(双写缓冲区)是为了把内存里的数据写入磁盘时高效、可靠地使用,它是硬盘上的区域;

buffer pool(缓冲池)是为了把磁盘里的数据加载到内存时高效地使用,它是内存上的区域。

buffer pool大小可以配置,在数据库启动时就会申请一片连续的内存作为buffer pool。

buffer pool里主要是缓冲加载进来的数据页(每个数据页大小也是16k),以及为了管理这个buffer pool的一些链表和哈希表。

  • free链表:存的是缓冲池里空闲的页。
  • flush链表:存的是缓冲池里修改过的页。
  • 哈希表:存的是缓冲池里被占用的页。用于快速访问。
  • LRU链表:存的是缓存池里被占用的页。在缓冲池空间不够的时候,用于淘汰一些不常用的页。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值