MySQL — InnoDB介绍

文章目录

  • 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.mzph.cn/news/24778.shtml

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

相关文章

【Datawhale AI 夏令营第二期】AI 量化模型预测挑战赛

文章目录 赛题分析赛题背景赛事任务赛题数据集评价指标 Baseline实践导入模块EDA特征工程模型训练与验证结果输出 改进 赛题分析 赛题背景 量化金融在国外已经有数十年的历程,而在国内兴起还不到十年。这是一个极具挑战的领域。量化金融结合了数理统计、金融理论、…

【雕爷学编程】MicroPython动手做(29)——物联网之SIoT 2

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

[PyTorch][chapter 46][LSTM -1]

前言: 长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的。 目录: 背景简介 LSTM C…

VR全景在建筑工程行业能起到哪些作用?

在建筑工程领域,数字化技术为行业的发展起到巨大的推动作用,虽然建筑施工行业主要是依赖于工人劳动力和施工设备,但是VR全景在该行业中方方面面都能应用,从设计建模到项目交付,帮助建筑师以及项目方更好的理解每个环节…

数字电路的重要概念——静态功耗和动态功耗

静态功耗和动态功耗: CMOS电路功耗是由静态功耗和动态功耗组成的,动态功耗远大于静态功耗 1:静态功耗: 我们从一个简单的反相器角度来理解和说明静态功耗的概念,众所周知,反相器是由PMOS和NMOS互补组成的…

【ES】笔记-let 声明及其特性

let 声明及其特性 声明变量 变量赋值、也可以批量赋值 let a;let b,c,d;let e100;let f521,giloveyou,h[];变量不能重复声明 let star罗志祥;let star小猪;块级作用域,let声明的变量只在块级作用域内有效 {let girl周杨青;}console.log(girl)注意:在 i…

Redis可视化工具

Redis可视化工具 1、RedisInsight 下载地址:https://redis.com/redis-enterprise/redis-insight/ 双击软件进行安装,安装完后弹出如下界面: 安装完成后在主界面选择添加Redis数据库; 选择手动添加数据库,输入Redis…

【统计学精要】:使用 Python 实现的统计检验— 1/10

一、介绍 欢迎来到“掌握 Python 统计测试:综合指南”,它将介绍本手册中您需要熟悉使用 Python 的所有基本统计测试和分析方法。本文将为您提供统计测试及其应用的全面介绍,无论您是新手还是经验丰富的数据科学家。 使用来自现实世界的实际示…

HarmonyOS 开发基础(五)对用户名做点啥

一、实现用户名检验 条件渲染 、生命周期 1.规定用户名长度 2.限定使用的数字及字母(涉及正则表达) // 导出方式直接从文件夹 import MyInput from "../common/commons/myInput" Entry Component /* 组件可以基于struct实现,组件…

驱动开发(中断)

头文件: #ifndef __LED_H__ #define __LED_H__#define PHY_LED1_MODER 0X50006000 #define PHY_LED1_ODR 0X50006014 #define PHY_LED1_RCC 0X50000A28#define PHY_LED2_MODER 0X50007000 #define PHY_LED2_ODR 0X50007014 #define PHY_LED2_RCC 0X50000A28#def…

在word的文本框内使用Endnote引用文献,如何保证引文编号按照上下文排序

问题 如下图所示,我在word中插入了一个文本框(为了插图),然后文本框内有引用,结果endnote自动将文本框内的引用优先排序,变成文献[1]了,而事实上应该是[31]。请问如何能让文本框内的排序也自动…

maven install命令:将包安装在本地仓库,供本地的其它工程或者模块依赖

说明 有时候,自己本地的maven工程依赖于本地的其它工程,或者manven工程中的一个模块依赖于另外的模块,可以执行maven的install命令,将被依赖的包安装在maven本地仓库。 示例 一个工程包含几个模块,模块之间存在依赖…

第一个maven项目(IDEA生成)

第一个maven项目(IDEA生成) 步骤1 配置Project SDK 步骤2 配置maven File->Settings搜索maven

风辞远的科技茶屋:来自未来的信号枪

很久之前,有位朋友问我,现在科技资讯这么发达了,你们还写啊写做什么呢? 我是这么看的。最终能够凝结为资讯的那个新闻点,其实是一系列事情最终得出的结果,而这个结果又会带来更多新的结果。其中这些“得出”…

kagNet:对常识推理的知识感知图网络 2023 AAAI 8.4+8.5

这里写目录标题 摘要介绍概述问题陈述推理流程 模式图基础概念识别模式图构造概念网通过寻找路径来匹配子图基于KG嵌入的路径修剪 知识感知图网络图卷积网络(GCN)关系路径编码分层注意机制 实验数据集和实验步骤比较方法KAGNET是实施细节性能比较和分析与…

python GUI nicegui初识一(登录界面创建)

最近尝试了python的nicegui库,虽然可能也有一些不足,但个人感觉对于想要开发不过对ui设计感到很麻烦的人来说是很友好的了,毕竟nicegui可以利用TailwindCSS和Quasar进行ui开发,并且也支持定制自己的css样式。 这里记录一下自己利…

【Spring框架】Spring事务

目录 Spring中事务的实现编程式事务声明式事务Transactional 作⽤范围Transactional 参数说明注意事项Transactional ⼯作原理 MySQL 事务隔离级别Spring 事务隔离级别事务传播机制 Spring中事务的实现 Spring中事务操作分为两类: 1.编程式事务 2.声明式事务 编程…

Abaqus 中最常用的子程序有哪些 硕迪科技

在ABAQUS中,用户定义的子程序是一种重要的构件,可以将其插入到Abaqus分析中以增强该软件的功能和灵活性。这些子程序允许用户在分析过程中添加自定义材料模型、边界条件、初始化、加载等特定操作,以便更精准地模拟分析中的现象和现象。ABAQUS…

小白电脑装机(自用)

几个月前买了配件想自己装电脑,结果最后无法成功点亮,出现的问题是主板上的DebugLED黄灯常亮,即DRAM灯亮。对于微星主板的Debug灯,其含义这篇博文中有说明。 根据另一篇博文,有两种可能。 我这边曾将内存条和主板一块…

mongodb-win32-x86_64-2008plus-ssl-3.6.23-signed.msi

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.6\binC:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin>mongod --dbpath C:\Mongo…