MySQL-Innodb-内存结构
一、 Innodb内存结构的基本组成1.1 基本结构说明Innodb内存结构的组成大致有Buffer pool缓冲池用于存储数据页、索引页包括自适应哈希索引、undolog缓冲区Change buffer变更缓冲区存在于buffer pool中Log buffer日志缓冲区1.2 为什么要有内存结构?如果所有数据操作例如增删查改统一都要与磁盘进行交互那么innodb存储引擎处理数据的性能就会大大降低。因为磁盘IO速度会比内存IO速度要慢很多很多现代应用开发大多数原则Innodb的原因就是因为Innodb可以通过内存、以及其他方式比如日志记录确保不丢失事务一致性的情况下提升性能1.3 Buffer pool 的结构1.3.1 大致结构Innodb中磁盘和内存的数据最小管理单位是页。Buffer pool中组织和管理页包括数据页、索引页方式如图一个MySQL服务器中可以有多个instances实例每个实例都可以独立进行DML操作。instances下管理多个Chunk每个Chunk都被分配一块连续的物理内存。这块物理内存中就存放了被缓存的Page。MySQL中支持通过innodb_buffer_pool_chunk_size、innodb_buffer_pool_instances、innodb_buffer_pool_size来配置内存大小但是不支持直接配置chunk的数量。我们可以通过(pool_size/instances)/chunk_size来计算每个chunk的大小1.3.2 page的组织方式在Innodb中页与页的组织方式是通过控制块来实现的控制块其实就相当于节点节点与节点之前相互连接形成逻辑上的链表。每个instance下都会单独维护这种结构的链表Free List 、Dirty List 、Clean List 后面会讲到。也就是说同一个instance下chunk与chunk管理的page都组织在同一套逻辑链表下。由于unlog 日志的组织方式也是页结构所以把undo log放到了buffer pool中通过控制块进行管理1.3.3 page和chunk的初始化方式每个chunk都有一块连续的内存。控制块会从左到右进行初始化而缓冲页则会从右到左进行初始化。如果中间不足以容纳一个控制块缓冲页那么这块内存会变成碎片区无法被使用。1.3.4 chunk的作用是什么每个chunk都会分配一块连续的物理内存。MySQL中内存大小调整的最小单位是chunk。如果要进行扩容像操作系统申请额外的chunk并初始化然后过载到Free List如果要缩容把空闲没有被使用的chunk归还给操作系统1.3.5为什么要区分多个实例之前讲到每一个instance可以独立的完成数据的DML操作这里的主要作用就是降低单一缓冲池全局锁的争抢提升MySQL的并发性能每个instance都维护独立的Free List 、Dirty List 、Clean Listinnodb把数据操作请求根据表空间id和页id分配给对应的instance完成DML操作不同instance的数据相互不会干扰因为Innodb保证buffer pool中每个缓冲页都是唯一的1.3.6 Buffer pool的缓存淘汰策略1.3.6.1 缓存结构Buffer pool中每个实例都会维护三个链表以此来保证缓存淘汰Free List保存已经从Flush List写回磁盘已经被用过的缓冲页Lru List此链表实际参与buffer pool的缓存淘汰记录了脏页和干净页当有新的缓存页时从Free List中获取FLush ListLru List中所有脏页在这里都会有对应副本当脏页写回磁盘后会把空闲页重新叫给Free List1.3.6.2 缓存淘汰实现原理Lru List参与缓存淘汰Free List和Flush List用于辅助。Lru List不是标准的Lru缓存结构它的具体实现方式如图相比于传统LruMySQL中Lru缓存链表在中间开了个口。左侧约5/8是young区右侧3/8是old区。当有新数据插入时将新数据插入中间。以用数据页被访问的缓存淘汰策略当访问的页在Lru list中如果在yong区直接移动到yong头。如果在old区实际上Innodb会记录每个old区中每个页在Old区停留的时间默认1000ms。大于这个值移动到yong头否则只移动到old头。1.3.6. 3 为什么要把Lru缓存一分为二如果用传统Lru当MySQL涉及临时的全表操作时原先已经缓存过的热数据可能会被全部刷走。操作完成后Lru链表中全是冷数据需要重新热更新这种场景下传统Lru就不适合使用了。1.4 ChangeBuffer1.4.1 changeBuffer作用change buffer的主要作用是针对修改非唯一二级索引进行的。这里先讲一个前置知识磁盘操作中随机IO要比顺序写慢得多实际上不论是二级索引还是聚集索引随机的数据操作都会导致磁盘的随机IO原因很简单Innodb中是通过B树来管理数据的而树型结构的数据本身在物理层面就是随机分布的。所以索引操作不可避免会产生随机IO而change buffer的作用就是尽可能的减少二级索引的随机IO次数从而提升MySQL性能1.4.2 changeBuffer怎么减少二级索引随机IO的Change Buffer 的核心思想是**“攒批异步合并写入”**其工作机制分为三步缓存修改异步延迟当对非唯一二级索引执行插入、更新或删除操作时InnoDB 不会立即将受影响的索引页从磁盘读取到内存而是将这次修改操作如“在页号X插入主键IDY”记录到 Change Buffer 中。这一步完全跳过了修改前的“随机读”IO。触发合并读入即合当后续某个查询需要读取该二级索引页或者后台线程主动刷盘时InnoDB 才将该索引页从磁盘加载到 Buffer Pool。应用变更批量落盘将 Change Buffer 中针对该索引页积压的所有修改操作**一次性合并Merge**到刚加载的内存数据页上随后将该干净页异步刷回磁盘。通过这种机制Change Buffer 充分利用了计算机系统中的两个重要特性时间局部性的应用合并重复操作如果某一行数据在短时间内被反复修改例如同一行1秒内被Update了100次没有Change Buffer时就要产生100次随机IO有了它这100次修改在内存中合并成1次最终结果最终只触发1次磁盘写入消除了时间维度上的重复IO。空间局部性的应用批量处理同页如果修改操作分散在同一个索引页物理上连续的16KB空间内的不同行记录上Change Buffer 会将这些散落的修改积攒起来。等到该页被加载时所有修改被一次性批量应用并写入磁盘将原本可能需要多次的随机IO缩减为单次IO写入一个完整的连续数据页。1.2.2 聚集索引/非唯一二级索引为什么不能用change buffer聚集索引/非唯一二级索引都要求同一个表中值必须唯一唯一性校验不能是异步的。例如同时插入两个值每个值的唯一索引都是1。那么后边合并数据的时候就乱套了。1.5 AHI1.5.1 概述AHI也就是自适应哈希同样保存在Buffer pool中但是只占buffer pool的很少容量。AHI的key存储的二级制值由对应行数据的主键和二级索引计算而来AHI的valude存储的是对应所在的缓冲页的内存地址以及偏移量这样就可以快速对应行数据。1.5.2 作用AHI可以在不牺牲事务一致性的情况下把高频查询数据以键值对的形式存储在哈希表内存中以提升查询性能。1.5.3 为什么要引入AHIbuffer pool中虽然有 page table的类似哈希表的结构可以根据表空间id和页id快速定位页但是它不能快速查询具体的某个行数据。也就是说AHI是针对某个频发查询数据行的操作进行优化。1.6 page hash和AHI区别page hash是每一个buffer pool中每一个instance都会维护的hash表数据它能根据要查询的数据的表空间id数据页id快速定位它所在的数据页。特性Page Hash自适应哈希索引 (AHI)核心目的快速定位数据页判断一个磁盘数据页是否已在 Buffer Pool 中。快速定位数据行加速对热点索引值的等值查询跳过 B 树的遍历。Key (键)(space_id, page_no)即“表空间ID 数据页号”。索引键值 (或前缀)由查询条件中的索引列值构成。Value (值)缓存页的地址 / 控制块指针指向 Buffer Pool 中对应的数据页。数据行在 B 树叶子节点中的位置或直接指向叶子节点中的记录。所有者每个 Buffer Pool Instance 独立维护一份。全局维护但内部可分区以减少竞争。二、LogBuffer2.1 作用用于存储redo log。redo log 重做日志用于记录对应操作要修改的行、字段、值。redo log的作用就是确保灾难恢复和事务的一致性。2.2 工作流程redolog会以事务为单位把更新操作保存到log buffer然后根据不同策略写入磁盘由innodb_flush_log_at_trx_commit控制1实时写每写入一个事务到内存就刷盘一次Innodb默认0每秒写每秒把已保存的修改操作刷盘2根据操作系统调度这种方式不确定性大不论何种方式刷盘的方式都是调用操作系统的write()接口写入操作系统chache page只是异步调用fsync()时机不同实时写则是每个事务写入后直接fsync()落盘。

相关新闻

C# System.IO文件处理全攻略:从基础API到高性能实战

C# System.IO文件处理全攻略:从基础API到高性能实战

1. 项目概述:为什么System.IO是C#开发者的必修课 如果你用C#写过任何需要和文件打交道的程序,无论是读取一个配置文件、保存用户上传的图片,还是处理海量的日志数据,那你一定绕不开 System.IO 这个命名空间。它就像是C#世界里通…

2026/8/13 22:32:16 阅读更多 →
从亚美尼亚AI工厂看分布式AI算力:GPU集群、成本优化与开发者实战

从亚美尼亚AI工厂看分布式AI算力:GPU集群、成本优化与开发者实战

如果你是一名开发者,最近可能已经感受到了AI基础设施领域正在发生一些微妙但重要的变化。过去,当我们谈论“AI算力”时,第一反应往往是美国、中国或者新加坡的数据中心。但最近,一个位于亚美尼亚、名为Firebird的公司,…

2026/8/13 22:32:16 阅读更多 →
网络热词FMB~~的传播机制与内容创作应用解析

网络热词FMB~~的传播机制与内容创作应用解析

1. 项目概述:从“FMB~~”看网络热词的传播与解构 最近在社交媒体和网络社区里,一个看起来有点“无厘头”的词——“FMB~~”——开始频繁出现。它可能出现在评论区,也可能作为某个视频的标签,甚至是一些年轻人聊天时的口头禅。乍一…

2026/8/13 22:32:16 阅读更多 →

最新新闻

孤能子视角:空间论——选择的差异:观察符切割关系场的显影面展开

孤能子视角:空间论——选择的差异:观察符切割关系场的显影面展开

(在以下的与AI互动中,在EIS理论约束下,DeepSeek叫信兄,Kim叫酷兄,我呢叫水兄。姑且当科幻小说看) (已由信兄整理成文)孤能子视角:空间论 ——选择的差异:观察符切割关系场的显影面展开 EIS理论库认识论分册…

2026/8/14 0:37:40 阅读更多 →
宁波南部商务区网站建设:如何为中小企业打造高转化率的线上获客引擎

宁波南部商务区网站建设:如何为中小企业打造高转化率的线上获客引擎

站在鄞州南部商务区的写字楼落地窗前,看着窗外车水马龙的景象,很多人可能会产生一种错觉:既然我们就身处这样的核心商圈,拥有如此优越的地理位置和成熟的配套设施,企业的品牌自然会在圈内口口相传,生意根本不用愁。这种想法在十年前或许成立,但在移动互联网全面渗透、信…

2026/8/14 0:37:40 阅读更多 →
抖店截流软件:Canvas+WebGL+AudioContext全维度指纹隔离

抖店截流软件:Canvas+WebGL+AudioContext全维度指纹隔离

抖店截流软件:CanvasWebGLAudioContext全维度指纹隔离 干电商的都明白一个道理:抖店的同行数据截流,是店群运营中最耗人力也最容易出错的环节。 同行截流是店群最核心的引流手段。别人花大价钱投流的爆款,你把他的商品数据、价格…

2026/8/14 0:37:40 阅读更多 →
快消品牌商渠道管理系统怎么选?2026年推荐这5款

快消品牌商渠道管理系统怎么选?2026年推荐这5款

2026年选快消品牌商渠道管理系统,核心不是比功能列表,而是看系统能否管好费用、看清终端、打通协同。面对年规模突破12万亿的快消存量市场,行业调研显示近40%的渠道预算存在无效损耗。这意味着,一套真正好用的渠道管理软件&#x…

2026/8/14 0:36:40 阅读更多 →
揭秘大良网站建设公司背后的故事:如何为你打造真正落地的数字化门面

揭秘大良网站建设公司背后的故事:如何为你打造真正落地的数字化门面

在这个数字化浪潮席卷全球的今天,对于大良地区的中小企业主来说,拥有一张“上网”的入场券已经不再是选择题,而是必答题。很多老板在初创期或者转型期,往往会把目光投向技术外包,其中“大良网站建设公司”便成为了不少本地商家首先考虑的合作伙伴。但是,当你真正深入这个…

2026/8/14 0:36:40 阅读更多 →
装修网站建设方案书全解析:从需求调研到上线运营的每一步都至关重要

装修网站建设方案书全解析:从需求调研到上线运营的每一步都至关重要

在这个移动互联网几乎渗透到生活每一角落的今天,对于装修公司或者独立设计师来说,拥有一款拿得出手的官方网站,已经不再是“可有可无”的加分项,而是“生死攸关”的标配。很多人一听到“做网站”,脑海里浮现的可能是一堆枯燥的代码、复杂的后台,或者是那种充满年代感的fl…

2026/8/14 0:36:40 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →