MySQL — InnoDB介绍

news2024/9/23 15:31:38

文章目录

  • InnoDB 主要特点
  • InnoDB 架构
    • In-Memory Structures
      • Buffer Pool
      • Change Buffer
      • Adaptive Hash Index
      • Log Buffer
    • On-Disk Structures
      • System Tablespace
      • File-Per-Table Tablespaces
      • General Tablespaces
      • Undo Tablespaces
      • Temporary Tablespaces
      • Doublewrite Buffer
      • Redo Log
      • Undo Log

InnoDB是一款兼顾高可靠性和高性能的通用存储引擎。也是默认的MySQL存储引擎。

InnoDB 主要特点

  1. 它的DML操作遵循ACID模型,事务具有提交、回滚和崩溃恢复功能,以保护用户数据。
  2. 行级锁定和oracle风格的一致性读取提高了多用户并发性和性能。
  3. InnoDB表在磁盘上排列数据,以优化基于主键的查询。每个InnoDB表都有一个主键索引,称为集群索引,它组织数据以最小化主键查找的I/O。
  4. 为了维护数据的完整性,InnoDB支持FOREIGN KEY约束。对于外键,将检查插入、更新和删除,以确保它们不会导致相关表之间的不一致。

InnoDB特性:
在这里插入图片描述

InnoDB 架构

在这里插入图片描述

In-Memory Structures

Buffer Pool

Buffer Pool 是InnoDB在访问表和索引数据时缓存的主内存区域。缓冲池允许直接从内存访问频繁使用的数据,这加快了处理速度。在专用服务器上,通常会将多达80%的物理内存分配给缓冲池。

为了提高大容量读操作的效率,缓冲池被划分为可能包含多行的页面。为了提高缓存管理的效率,Buffer Pool 被实现为页面链表; 很少使用的数据使用LRU算法的变体从缓存中老化。

Change Buffer

Change Buffer 是一种特殊的数据结构,当二级索引页不在缓冲池中时,它将更改缓存到二级索引页。缓冲的更改可能来自INSERT、UPDATE或DELETE操作(DML),之后当其他读操作将页面加载到缓冲池中时,这些更改将被合并。

Adaptive Hash Index

自适应哈希索引使InnoDB在不牺牲事务特性或可靠性,且工作负载和缓冲池足够的情况下,在系统上更像一个内存数据库。自适应哈希索引由innodb_adaptive_hash_index变量启用,或者在服务器启动时通过——skip-innodb-adaptive-hash-index关闭。

Log Buffer

日志缓冲区是存储要写入磁盘上的日志文件的数据的内存区域。日志缓冲区大小由innodb_log_buffer_size变量定义。默认大小为16MB。日志缓冲区的内容定期刷新到磁盘。大的日志缓冲区允许运行大型事务,而不需要在事务提交之前将重做日志数据写入磁盘。因此,如果您有更新、插入或删除许多行的事务,那么增加日志缓冲区的大小可以节省磁盘I/O。

On-Disk Structures

System Tablespace

系统表空间是变更缓冲区的存储区域。如果表是在系统表空间中创建的,而不是在每个表文件或一般表空间中创建,则它还可能包含表和索引数据。

系统表空间可以包含一个或多个数据文件。默认情况下,在data目录中创建一个系统表空间数据文件ibdata1。系统表空间数据文件的大小和数量由innodb_data_file_path启动选项定义。

File-Per-Table Tablespaces

每个表文件的表空间包含单个InnoDB表的数据和索引,并存储在文件系统中的单个数据文件中。

General Tablespaces

通用表空间是使用CREATE tablespace语法创建的共享InnoDB表空间。

Undo Tablespaces

Undo表空间包含Undo日志,这些日志是记录的集合,其中包含有关如何撤消事务对聚集索引记录的最新更改的信息。

Temporary Tablespaces

包含 session Temporary Tablespaces 和 global temporary tablespace:

  1. session Temporary Tablespaces

    当InnoDB被配置为磁盘上的内部临时表的存储引擎时,会话临时表空间存储由用户创建的临时表和优化器创建的内部临时表。磁盘上的内部临时表使用InnoDB存储引擎。

  2. global temporary tablespace
    全局临时表空间(ibtmp1)存储对用户创建的临时表所做更改的回滚段。

Doublewrite Buffer

Doublewrite Buffer是一个存储区域,InnoDB在将页面写入到InnoDB数据文件中的适当位置之前,会将从缓冲池中刷新的页面写入该存储区域。如果操作系统、存储子系统或mysqld进程在写页面的过程中意外退出,InnoDB可以在崩溃恢复期间从doublewrite缓冲区中找到一个好的页面副本。

虽然数据写入两次,但doublewrite缓冲区并不需要两倍的I/O开销或两倍的I/O操作。数据在一个大的顺序块中写入到doublewrite缓冲区,只需对操作系统调用一次fsync(),除非innodb_flush_method被设置为O_DIRECT_NO_FSYNC。

Redo Log

redo log是一种基于磁盘的数据结构,用于在崩溃恢复期间纠正由不完整事务写入的数据。在正常的操作过程中,redo log对由SQL语句或低级API调用引起的更改表数据的请求进行编码。在意外关机之前未完成更新数据文件的修改将在初始化期间和接受连接之前自动执行。

Undo Log

undo logs 是与单个读写事务相关联的撤消日志记录的集合。undo log 记录包含有关如何撤销事务对聚集索引记录的最新更改的信息。如果另一个事务需要将原始数据作为一致读操作的一部分查看,则从撤销日志记录中检索未修改的数据。撤销日志存在于撤销日志段中,撤销日志段包含在回滚段中。回滚段位于undo表空间和全局临时表空间中。

位于全局临时表空间中的撤销日志用于修改用户定义临时表中的数据的事务。这些撤销日志不会重新记录,因为崩溃恢复不需要它们。它们仅用于服务器运行时的回滚。这种类型的撤销日志通过避免重做日志I/O来提高性能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring boot中web容器配置

web容器配置 spring boot 默认的web容器是 tomcat&#xff0c;如果需要换成其他的 web 容器&#xff0c;可以如下配置。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 默…

ROS添加节点

1 下载项目源码 &#xff08;1&#xff09;这里我使用是哔哩哔哩的博主源码机器人工匠王杰 https://github.com/6-robot/wpr_simulation.git &#xff08;2&#xff09;建立工作空间 在主目录下载建立如下文件夹 catkin_ws----       ----src &#xff08;3&#xff09;…

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本 引言 在 Java 生态系统中&#xff0c;Spring Boot、Spring Cloud 和 Spring Alibaba 是非常流行的框架&#xff0c;它们提供了丰富的功能和优雅的解决方案。然而&#xff0c;随着不断的发展和更新&…

【51单片机】晨启科技,酷黑版,音乐播放器

四、音乐播放器 任务要求&#xff1a; 设计制作一个简易音乐播放器&#xff08;通过手柄板上的蜂鸣器发声&#xff0c;播放2到4首音乐&#xff09;&#xff0c;同时LED模块闪烁&#xff0c;给人视、听觉美的感受。 评分细则&#xff1a; 按下播放按键A6开始播放音乐&#xff0…

使用Socket实现TCP版的回显服务器

文章目录 1. Socket简介2. ServerSocket3. Socket4. 服务器端代码5. 客户端代码 1. Socket简介 Socket&#xff08;Java套接字&#xff09;是Java编程语言提供的一组类和接口&#xff0c;用于实现网络通信。它基于Socket编程接口&#xff0c;提供了一种简单而强大的方式来实现…

SpringBoot项目上传至服务器

1.服务器安装JDK1.8 通过包管理器安装 2.服务器安装数据库 参考链接&#xff1a; CentOS 7 通过 yum 安装 MariaDB - 知乎 1. 安装之后没有密码&#xff0c;所以需要设置密码&#xff0c;使用下面的语句 set password for rootlocalhost password(111111); 2.在数据库中建…

子集 II——力扣90

文章目录 题目描述题目描述 class Solution {public:vector<int> t;vector<vector<int>> ans;vector<vector

康冠医疗2021笔试题

笔试时间:2020.09.24。 岗位:嵌入式软件工程师。 题型:13道题,40分钟。 6道填空,2道简答,5道编程,时间紧任务重。 1、填空 4、考察extern关键字。 6、const可以用来代替define ,define 只是简单的代替,但是const还会进行类型检查。 怎么避免头文件重复包含: #…

前端 页面地址栏修改Url参数后回车 路由页面不刷新!

关于&#xff1a;页面地址栏修改Url参数后回车 路由页面不刷新的问题 需要回车两次才会触发刷新 重新加载 原因&#xff1a;因为你的路由Url是相同的&#xff0c;vue会认为你是同一个页面&#xff0c;从而复用已加载的页面 从缓存里面拿&#xff0c;而不会重新加载&#xff0c;…

关于java异常的整理

文章目录 一、异常分类二、throw、throws、try-catch-finally三、CglibAopProxy中对异常的处理4、关于UndeclaredThrowableException 一、异常分类 java异常层级结构 Throwable:所有异常的根接口 Error:严重错误,程序无法处理和恢复 例如VirtualMachineError,OOMError等 Excep…

React相关学习导引

目录 扩展学习资料 什么是React&#xff1f; 什么是Component 组件树结构 虚拟dom 为何要选React 选择React React生态 为何选择React 学习目录 思考一下~ 扩展学习资料 Awsome React知识体系 https://github.com/enaqx/awesome-react 了解React生态&#xff0c…

外边距合并可能产生的问题

外边距合并可能产生的问题&#xff0c;可能会出现合并和塌陷问题 1、这种现象&#xff0c;先要准备两个盒子&#xff1a; 2、 父元素往下走了20px 3、让孩子也走一走 4、父元素和子元素同时存在了margin的情况&#xff0c;就会出现塌陷的情况产生&#xff0c;不能都使用margin:…

SPINN:基于设备和云的神经网络协同递进推理

SPINN&#xff1a;基于设备和云的神经网络协同递进推理 论文标题&#xff1a;SPINN: synergistic progressive inference of neural networks over device and cloud 原文链接&#xff1a;https://dl.acm.org/doi/10.1145/3372224.3419194 论文动机 现代CNN过多的计算需求&am…

【数据分享】2000-2022年1km精度人口分布栅格数据(免费获取/全球/全国/分省/分市)

人口空间分布数据是我们在各项研究中经常使用的数据&#xff0c;之前我们给大家分享过2000-2021年来自LandScan平台的1km精度的人口分布栅格数据集。LandScan人口数据集由美国能源部橡树岭国家实验室&#xff08;ORNL&#xff09;开发&#xff0c;East View Cartographic提供。…

1980-2020中国土地利用现状遥感监测数据(数据格式:shp)

LUCC分类体系 一级类型二级类型编号名称编号名称含义1耕地––指种植农作物的土地&#xff0c;包括熟耕地、新开荒地、休闲地、轮歇地、草田轮作物地&#xff1b;以种植农作物为主的农果、农桑、农林用地&#xff1b;耕种三年以上的滩地和海涂。––11水田指有水源保证和灌溉设…

HDFS中的NAMENODE元数据管理(超详细)

元数据管理 元数据是什么元数据管理概述内存元数据元数据文件fsimage内存镜像文件edits log编辑日志 namenode加载元数据文件顺序 元数据管理相关目录文件元数据相关文件VERSIONseen_txid 元数据文件查看&#xff08;OIV,OEV&#xff09;SecondaryNameNode介绍checkpoint机制SN…

SynergyNet(头部姿态估计 Head Pose Estimation)复现 demo测试

目录 0 相关资料1 环境搭建2 安装 SynergyNet3 下载相关文件4 编译5 测试 0 相关资料 SynergyNet&#xff08;github&#xff09;&#xff1a;https://github.com/choyingw/SynergyNet 1 环境搭建 我用的AutoDL平台搭建 选择镜像 PyTorch 1.9.0 Python 3.8(ubuntu18.04) Cu…

2.Flink应用

2.1 数据流 DataStream&#xff1a;DataStream是Flink数据流的核心抽象&#xff0c;其上定义了对数据流的一系列操作DataStreamSource&#xff1a;DataStreamSource 是 DataStream 的 起 点 &#xff0c; DataStreamSource 在StreamExecutionEnvironment 中 创 建 &#xff0c;…

Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明

目录 Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改Hi3798MV200 恩兔N2 NS-1 (三): 制作 Ubuntu rootfsHi3798MV200 恩兔N2 NS-1 (四): 制作 Debian rootfs 介绍 恩兔N2是一个家庭存储的系列产品, NS-1 是其中体积…

【数据结构和算法】排序算法

说明&#xff1a;以下排序如无特别说明&#xff0c;都是从小到大升序排序 1. 冒泡排序 核心思想&#xff1a;每个元素与其相邻元素比较&#xff0c;如果前者大于后者则交换&#xff0c;每次循环结束后会将最大值放到最后&#xff0c;像小水泡从底下冒到上面成大水泡一样&…