MySQL - InnoDB 内存结构解析

本文详细解析了MySQL InnoDB内存结构,重点介绍了Buffer Pool,包括Page的分类(Free、Clean、Dirty)及管理的Free、Flush、LRU链表。此外,还探讨了Change Buffer的作用、数据更新流程及其适用场景,旨在优化非唯一普通索引页的更新。Log Buffer和Adaptive Hash Index也是提升查询效率的关键组件。
摘要由CSDN通过智能技术生成

下面是官方的 InnoDB 引擎架构图,主要分为内存结构磁盘结构两大部分。
在这里插入图片描述

一、Buffer Pool 概述

Buffer Pool:缓冲池,简称 BP。其作用是用来缓存表数据与索引数据,减少磁盘 IO 操作,提升效率。

Buffer Pool 由缓存数据(Page) 和对缓存数据页进行描述的控制块组成,控制块中存储着对应缓存页的所属的表空间、数据页的编号、以及对应缓存页在 Buffer Pool 中的地址等信息。

Buffer Pool 默认大小是 128M, 以 Page 页为单位,Page 页默认大小 16K,而控制块的大小约为数据页的5%,大概是800字节。
在这里插入图片描述

注:Buffer Pool 大小为 128M 指的就是缓存页的大小,控制块则一般占5%,所以每次会多申请 6M 的内存空间用于存放控制块。

如何判断一个页是否在 BufferPool 中缓存 ?

MySQl 中有一个哈希表数据结构,它使用表空间号+数据页号,作为一个 key,然后缓冲页对应的控制块作为 value。
在这里插入图片描述
当需要访问某个页的数据时,先从哈希表中根据表空间号和页号看看是否存在对应的缓冲页。如果有,则直接使用;如果没有,就从 free 链表中选出一个空闲的缓冲页,然后把磁盘中对应的页加载到该缓冲页的位置。

二、Page 页分类

Page 根据状态可以分为三种类型:
在这里插入图片描述

  1. Free Page:空闲 Page,未使用
  2. Clean Page:被使用 Page 但是数据没有修改过
  3. Dirty Page:脏页,使用过数据被修改过,与磁盘数据产生不一致
    针对上面所说的三种 page 类型,InnoDB 通过三种链表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值