Innodb架构解析

整体架构

通过《面试官:一条SQL是如何执行的?》我们了解了MySQL架构,下面我们看下Innodb架构。

innodb最早由Innobase Oy公司开发,5.5版本开始是MySQL默认存储引擎,该存储引擎是第一个完整支持ACID事务的MySQL存储引擎(BDB是第一个支持事务的MySQL存储引擎,现在已经停止开发),其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和CPU。下面我们详细看下innodb架构:

图片

内存架构

  • Buffer Pool(缓冲池)是InnoDB存储引擎中的一个重要组件,用于高效地缓存数据库中的数据页。它是内存中的一块区域,用于存储从磁盘读取的数据页,以加快数据的访问速度。在专用服务器上,通常将物理内存的最多80%分配给缓冲池。当InnoDB需要读取数据页时,首先会在缓冲池中查找该页是否已经被缓存。如果该页已经在缓冲池中,InnoDB可以直接从内存中获取数据,避免了磁盘IO的开销,从而提高数据访问的速度。如果该页不在缓冲池中,InnoDB会将其读取到缓冲池中,并进行相应的缓存管理。Buffer Pool的大小是通过配置参数innodb_buffer_pool_size来指定的。较大的缓冲池可以容纳更多的数据页,提供更好的缓存效果,从而减少磁盘IO操作。合理配置缓冲池的大小对于数据库的性能至关重要,它应该根据数据库的大小、可用内存和访问模式来进行调整。Buffer Pool的作用在于:

    1. 提高数据访问性能:通过缓存数据页,减少磁盘IO,加快数据的读取速度。

    2. 减少磁盘访问:由于数据页已经在内存中,可以减少频繁的磁盘读取操作,降低IO开销。

    3. 优化查询性能:对于频繁访问的数据,可以直接从缓冲池中获取,减少查询的响应时间。

  • Change Buffer

    图片

    Change Buffer是一种特殊的数据结构,用于在次要索引页不在缓冲池中时缓存对其进行的更改。这些缓冲的更改可能来自于插入(INSERT)、更新(UPDATE)或删除(DELETE)操作(DML),它们在后续的读操作将这些页加载到缓冲池时被合并。Change Buffer的目的是降低写操作的磁盘IO,提升数据库性能。

  • Log Buffer 当在MySQL中对InnoDB表进行更改时,这些更改首先存储在InnoDB日志缓冲区的内存中(Log Buffer),然后写入通常称为重做日志(redo logs)的InnoDB日志文件中。日志缓冲区的大小由innodb_log_buffer_size 变量定义,其默认大小为16MB。日志缓冲区的内容会定期刷新到磁盘。较大的日志缓冲区可以使大型事务在提交之前无需将重做日志数据写入磁盘,从而提供更好的性能。因此,如果存在更新、插入或删除大量行的事务,则增加日志缓冲区的大小可以减少磁盘IO操作。 innodb_flush_log_at_trx_commit变量控制日志缓冲区的内容如何写入和刷新到磁盘。innodb_flush_log_at_timeout 变量控制日志刷新的频率。

磁盘架构

InnoDB存储引擎使用页作为基本单位来管理存储空间,每个页的默认大小为16KB。对于每个索引,InnoDB使用B+树结构,其中每个节点都是一个数据页。数据页之间不必连续存储,而是通过双向链表来维护它们的顺序。

InnoDB的聚簇索引将完整的用户记录存储在叶子节点中,也就是说索引即数据,数据即索引。

为了更好地管理这些页,InnoDB引入了表空间(Tablespace)的概念。表空间是一个抽象的概念,可以对应于一个或多个实际的文件。每个表空间可以被划分为多个页,表的数据存放在特定表空间下的一些页中。InnoDB将表空间划分为几种不同的类型:

  1. 系统表空间(System Tablespace):系统表空间可以对应文件系统上一个或多个实际的文件,默认情况下,InnoDB会在数据目录下创建一个名为ibdata1的文件,这个文件就是对应的系统表空间在文件系统上的表示。这个文件是自扩展文件,当不够用的时候它会自己增加文件大小。也可以把系统表空间对应的文件路径不配置到数据目录下,甚至可以配置到单独的磁盘分区上,涉及到的启动参数就是innodb_data_file_pathinnodb_data_home_dir。需要注意的一点是,在一个MySQL服务器中,系统表空间只有一份。

  2. 独立表空间(File-per-table Tablespace):在MySQL5.6.6以及之后的版本中,InnoDB并不会默认把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立表空间,也就是说我们创建了多少个表,就有多少个独立表空间。使用独立表空间来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同,只不过添加了一个.ibd的扩展名。我们也可以自己指定使用系统表空间还是独立表空间来存储数据,这个功能由启动参数innodb_file_per_table控制。

  3. 通用表空间(General Tablespace):通用表空间是MySQL 8中引入的新特性,它允许将多个表存储在一个表空间中。通用表空间可以跨数据库和服务器共享,提供了更高的灵活性和资源利用率。

  4. 临时表空间(Temporary Tablespaces):临时表空间用于存储临时表和临时文件。当执行排序、连接和其他需要临时存储的操作时,InnoDB会使用临时表空间来存储相关数据。

此外,InnoDB还使用其他文件和机制来支持数据管理和恢复:

  1. 双写缓冲文件(Doublewrite Buffer Files):双写缓冲是一种机制,用于提高数据写入的可靠性。InnoDB将数据页首先写入双写缓冲文件中,然后再将其写入实际的数据文件。这样可以在发生故障时,通过双写缓冲文件恢复数据的一致性。

  2. Undo表空间(Undo Tablespaces):撤消表空间用于存储撤消日志(undo log),用于支持事务的回滚和MVCC(多版本并发控制)。每个事务对数据的修改都会生成相应的撤消日志,这些日志被存储在撤消表空间中。

  3. 重做日志(Redo Log):重做日志是用于事务的持久性和故障恢复的重要组件。它记录了事务对数据的修改操作,包括插入、更新和删除。重做日志文件存储在磁盘上,并在事务提交时进行持久化。

这些组件和机制共同构成了InnoDB的磁盘架构,用于管理和存储数据。

InnoDB的工作流程

当用户发起一个数据操作请求时,InnoDB的处理流程大致如下:

  1. 事务开始:InnoDB为每个事务分配一个唯一的事务ID,并在事务开始时创建一个事务对象。

  2. 数据读取:如果数据不在缓冲池中,InnoDB会从磁盘读取数据页面到缓冲池。

  3. 数据修改:修改操作首先在缓冲池中进行,同时记录到重做日志缓冲区。

  4. 日志写入:日志缓冲区定期刷新到重做日志文件,确保数据的持久性。

  5. 提交事务:在事务提交时,InnoDB确保所有相关的重做日志已经写入磁盘,这个过程称为预写日志协议(Write-Ahead Logging, WAL)。

  6. 后台处理:事务提交后,InnoDB的后台线程会负责将缓冲池中修改过的页面异步刷新到磁盘,同时合并插入缓冲和维护其他内部结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/305346.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git修改本地提交历史邮箱地址

1、Git(Git) 2、修改Git本地提交历史中的邮箱地址 使用 git rebase 命令进行交互式重置。 具体步骤如下:(https://git-scm.com/docs/git-rebase) 1、查看提交历史: 使用 git log 命令列出提交历史&#x…

弹簧、质量的bode、nyquist与根轨迹图

在控制系统分析中,Bode图、Nyquist图和根轨迹图都是重要的工具,用于评估和分析系统的性能。这些系统的Nyquist图提供了最大的旋转,即它们在频率变化时表现出最大的相位变化。当Nyquist图完全位于虚轴上时,意味着系统的增益&#x…

【学习】移动端兼容性测试有什么方法及重要性

随着移动互联网的快速发展,移动应用程序已经成为人们日常生活中不可或缺的一部分。然而,由于各种移动设备的硬件和软件差异,移动应用程序的兼容性问题也越来越突出。因此,移动端兼容性测试成为了一个重要的环节,它可以…

猝不及防 CCF-B ICPP 2024投稿延期至4月22日提交摘要 机会来了别错过

会议之眼 快讯 第53届ICPP(International Conference on Parallel Processing)即国际并行处理会议将于 2024年 8月12日-15日在瑞典哥特兰岛举行!ICPP是世界上最古老的连续举办的并行计算计算机科学会议之一。它是学术界、工业界和政府的研究…

1572. 【基础赛】涂色(paint)

1572. 【基础赛】涂色(paint) (Input: paint.in, Output: paint.out) 时间限制: 2 s 空间限制: 256 MB 具体限制 题目描述 Introl获得了一个N行的杨辉三角,他将每行中值为奇数的位置涂为了黑色。 Chihiro将提出M次询问,在第L…

C语言强制类型转换

目录 王道ppt总结: ​编辑相关博主文章: 王道ppt总结: 相关博主文章:char范围详解,为什么是-128~127,以及int类型范围详解(整型数据在内存中的存储)_char型和int型数据范围-CSDN博客https://b…

数据分析——数据规范化

数据规范化是数据分析中的一个重要步骤,其目的在于确保数据的一致性和可比性,提高数据质量和分析结果的准确性。以下是一些数据规范化的常见方法和技术: 数据清洗:此步骤主要清除数据中的重复项、空格、格式错误等,确…

微信小程序uniapp+vue电力巡线任务故障报修管理系统2q91t

uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 前端开发:vue 语言:javapythonnodejsphp均支持 运行软件:idea/eclipse/vscode/pycharm/wamp均支持 框架支持:Ssm/django/flask/t…

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第九套

华为海思校园招聘-芯片-数字 IC 方向 题目分享(共9套,有答案和解析,答案非官方,未仔细校正,仅供参考)——第九套 部分题目分享,完整版获取(WX:didadidadidida313,加我备注&#xff…

套接字通信模型

本文内容主要参考《Android图形显示系统》 套接字也就是socket,一般用于网络中两个主机之间应用进程进行通信,在同一个主机也可以使用套接字完成进程之间的通信。 在图形显示系统中,用到套接字进行通信的地方主要有VSync信号的分发以及输入事…

代码随想录算法训练营第五十一天 |309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费

代码随想录算法训练营第五十一天 |309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费 309. 买卖股票的最佳时机含冷冻期题目解法 714. 买卖股票的最佳时机含手续费题目解法 感悟 309. 买卖股票的最佳时机含冷冻期 题目 解法 题解链接 1. class Solution { …

2012年认证杯SPSSPRO杯数学建模A题(第二阶段)蜘蛛网全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 A题 蜘蛛网 原题再现: 第二阶段问题   现在我们假设一个具体的环境。假设有一个凸多边形的区域,蜘蛛准备在这个区域(或其一部分)上结一张网。   问题一: 在区域的边界上安置有若干…

在keil里用c++编程(1)

做嵌入式开发时,我们对使用c语言写的库有强烈的需求,比如eigen,boost等,但是通常来说,我们的开发是围绕c语言进行的,怎么把c的库文件放在c语言环境下进行编译,就是我们需要面对的问题 1.问题来…

【c++】STl-list使用list模拟实现

主页:醋溜马桶圈-CSDN博客 专栏:c_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 …

Linux下网络编程基础知识--协议

网络基础 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 协议 一组规则, 数据传输和数据的解释的规则。 比如说依次发送文件的文件名, 文件的大小, 以及实际的文件, 这样规定发送一个文件的顺序以及发送的每一个部分的格式等可以算是一种协议 型协议 …

【MATLAB源码-第185期】基于matlab的16QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境: MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术,作为一种高效的调制方案,能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…

二分查找-图文详解,看不懂你来打我。。。

一、查找算法 在计算机科学和算法领域,搜索是一项基本的任务。在海量数据中寻找特定的元素是一项常见的任务,而二分查找(Binary Search)是一种非常高效的搜索算法,特别适用于有序数组。 二、二分查找 二分查找是一种…

ctf_show笔记篇(web入门---SSRF)

ssrf简介 ssrf产生原理: 服务端存在网络请求功能/函数,例如:file_get_contens()这一类类似于curl这种函数传入的参数用户是可控的没有对用户输入做过滤导致的ssrf漏洞 ssrf利用: 用于探测内网服务以及端口探针存活主机以及开放服务探针是否存…

常用的深度学习自动标注软件

0. 简介 自动标注软件是一个非常节省人力资源的操作,而随着深度学习的发展,这些自动化标定软件也越来越多。本文章将会着重介绍其中比较经典的自动标注软件 1. AutoLabelImg AutoLabelImg 除了labelimg的初始功能外,额外包含十多种辅助标注…

Java+BS +saas云HIS系统源码SpringBoot+itext + POI + ureport2数字化医院系统源码

JavaBS saas云HIS系统源码SpringBootitext POI ureport2数字化医院系统源码 医院云HIS系统是一种运用云计算、大数据、物联网等新兴信息技术的业务和技术平台。它按照现代医疗卫生管理要求,在特定区域内以数字化形式收集、存储、传递和处理医疗卫生行业的数据。通…