当前位置: 首页 > news >正文

InnoDB

InnoDB 是 MySQL 默认的存储引擎,它提供了事务支持、行级锁定和外键约束等高级功能。下面详细解析 InnoDB 的一些底层原理和关键特性。

1. 数据存储结构

表空间(Tablespace)

InnoDB 使用表空间来管理数据存储,表空间可以是共享的(系统表空间)或独立的(每个表一个表空间)。在 MySQL 5.6 及以后的版本中,默认情况下,每个 InnoDB 表会有自己独立的表空间。

页(Page)

InnoDB 将数据存储在称为页(Page)的物理结构中,默认页大小为 16KB。页是最小的磁盘管理单位。

段和区(Extent)

页进一步被组织成段(Segment)和区(Extent)。一个区包含 64 个连续的页(1MB),多个区组成一个段。段用于管理特定类型的数据,如数据页、索引页、Undo 页等。

2. 索引结构

InnoDB 使用 B+ 树作为其主要的索引数据结构:

聚簇索引(Clustered Index)

每个 InnoDB 表都有一个聚簇索引,这个索引按主键顺序存储表中的行数据。如果没有定义主键,InnoDB 会选择一个唯一的非空索引代替;如果没有这样的索引,InnoDB 会生成一个隐式的主键作为聚簇索引。

二级索引(Secondary Index)

二级索引是非聚簇索引,它们存储索引列的值和相应的主键值。查找二级索引时,首先通过二级索引找到主键值,然后通过主键值在聚簇索引中找到实际的数据行。

3. 事务支持

InnoDB 是支持 ACID 特性的事务型存储引擎:

原子性(Atomicity)

InnoDB 使用重做日志(Redo Log)和回滚日志(Undo Log)来确保事务的原子性。重做日志用于恢复提交的事务,回滚日志用于回滚未提交的事务。

一致性(Consistency)

InnoDB 使用外键约束和事务来确保数据的一致性。

隔离性(Isolation)

InnoDB 支持多种隔离级别,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和可串行化(Serializable)。默认的隔离级别是可重复读。

持久性(Durability)

InnoDB 通过将事务日志写入磁盘来确保持久性。事务日志被保存在重做日志文件中,系统崩溃后可以通过重做日志恢复数据。

4. 并发控制

锁机制

InnoDB 支持行级锁定,包括共享锁(S Lock)和排他锁(X Lock)。这允许多个事务并发访问数据,但保证数据一致性。

多版本并发控制(MVCC)

InnoDB 使用 MVCC 来提高并发性能和隔离性。MVCC 通过保存数据行的多个版本,并使用回滚日志来实现。这使得读操作不会阻塞写操作,写操作也不会阻塞读操作。

5. 崩溃恢复

InnoDB 使用重做日志和检查点机制来实现崩溃恢复。当数据库崩溃时,InnoDB 可以通过重做日志将数据恢复到一致状态。

重做日志(Redo Log)

重做日志记录事务的修改操作,用于在崩溃后重做这些操作以恢复数据。重做日志写入是顺序的,因此性能较好。

回滚日志(Undo Log)

回滚日志记录事务的旧版本数据,用于实现回滚和 MVCC。回滚日志会在事务提交后被清理。

6. 自动检查点(Checkpoint)

InnoDB 会定期执行检查点,将内存中的数据刷新到磁盘,并更新重做日志的写入位置。检查点有助于减少恢复时间和提高性能。

总结

InnoDB 作为 MySQL 的默认存储引擎,提供了强大的事务支持、行级锁定、多版本并发控制和崩溃恢复机制。它的底层实现涉及复杂的数据结构和算法,保证了高性能和高可靠性。通过理解这些底层原理,可以更好地优化和管理 MySQL 数据库。

相关文章:

InnoDB

InnoDB 是 MySQL 默认的存储引擎,它提供了事务支持、行级锁定和外键约束等高级功能。下面详细解析 InnoDB 的一些底层原理和关键特性。 1. 数据存储结构 表空间(Tablespace) InnoDB 使用表空间来管理数据存储,表空间可以是共享…...

spark运行报错:Container killed by YARN for exceeding memory limits

用spark跑数据量大的离线调度任务报错:Reason: Container killed by YARN for exceeding memory limits. 19.0 GB of 19 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead or disabling yarn.nodemanager.vmem-check-enabled becaus…...

(三)大模型/人工智能/机器学习/深度学习/NLP

一.模型 模型,简单来说,就是用来表示或解释某个事物、现象或系统的一种工具或框架。它可以是实体的,也可以是虚拟的,目的是为了帮助我们更好地理解和预测所描述的对象。在生活中,模型无处不在,它们以各种形…...

数学基础 -- 三角学

三角学 三角学(Trigonometry)是数学的一个分支,主要研究三角形的边长与角度之间的关系。三角学在几何学、物理学、工程学等多个领域中有广泛的应用。以下是三角学的一些基本概念和公式: 基本概念 直角三角形:一个角…...

基于BitMap的工作日间隔计算

背景问题 在我们实际开发过程中,时常会遇到日期的间隔计算,即计算多少工作日之后的日期,在不考虑法定节假日的情况下也不是那么复杂,毕竟周六、周日是相对固定的,Java语言也提供了丰富的类来处理此问题。 然而&#x…...

sqlite3 — DB-API 2.0 interface for SQLite databases

sqlite3 — DB-API 2.0 interface for SQLite databases — Python 3.12.4 documentation sqlite3 — DB-API 2.0 interface for SQLite databasessqlite3 — SQLite数据库的DB-API 2.0接口 Source code: Lib/sqlite3/ 源代码位置:Lib/sqlite3/ SQLite is a C…...

Spring Boot中的安全配置与实现

Spring Boot中的安全配置与实现 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Spring Boot中的安全配置与实现,看看如何保护你的…...

DepthAnything(2): 基于ONNXRuntime在ARM(aarch64)平台部署DepthAnything

DepthAnything(1): 先跑一跑Depth Anything_depth anything离线怎么跑-CSDN博客 目录 1. 写在前面 2. 安装推理组件 3. 生成ONNX 4. 准备ONNXRuntime库 5. API介绍 6. 例程 1. 写在前面 DepthAnything是一种能在任何情况下处理任何图像的简单却又强大的深度估计模型。 …...

JAVA简单封装UserUtil

目录 思路 一、TokenFilterConfiguration 二、FilterConfig 三、TokenContextHolder 四、TokenUtil 五、UserUtil 思路 配置Token过滤器(TokenFilterConfiguration):实现一个Token过滤器配置,用于拦截HTTP请求,从请求头中提取Token&…...

【TOOLS】Chrome扩展开发

Chrome Extension Development 1. 入门教程 入门案例,可以访问【 谷歌插件官网官方文档 】查看官方入门教程,这里主要讲解大概步骤 Chrome Extenson 没有固定的脚手架,所以项目的搭建需要根据开发者自己根据需求搭建项目(例如通过…...

分享WPF的UI开源库

文章目录 前言一、HandyControl二、AduSkin三、Adonis UI四、Panuon.WPF.UI五、LayUI-WPF六、MahApps.Metro七、MaterialDesignInXamlToolkit八、FluentWPF九、DMSkin总结 前言 分享WPF的UI开源库。 一、HandyControl HandyControl是一套WPF控件库,它几乎重写了所…...

[ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)

最新消息ICVISP 2024-已通过ACM出版申请投稿免费参会,口头汇报或海报展示(可获得相应证明证书) ————————————————————————————————————————— [ACM独立出版]2024年虚拟现实、图像和信号处理国际学术会议(ICVI…...

JVM:类加载器

文章目录 一、什么是类加载器二、类加载器的应用场景三、类加载器的分类1、分类2、启动类加载器3、Java中的默认类加载器(1)扩展类加载器(2)应用程序类加载器(3)arthas中类加载器相关的功能 四、双亲委派机…...

支持向量机 (support vector machine,SVM)

支持向量机 (support vector machine,SVM) flyfish 支持向量机是一种用于分类和回归的机器学习模型。在分类任务中,SVM试图找到一个最佳的分隔超平面,使得不同类别的数据点在空间中被尽可能宽的间隔分开。 超平面方…...

宝塔面板以www用户运行composer

方式一 执行命令时指定www用户 sudo -u www composer update方式二 在网站配置中的composer选项卡中选择配置运行...

昇思25天打卡营-mindspore-ML- Day24-基于 MindSpore 实现 BERT 对话情绪识别

学习笔记:基于MindSpore实现BERT对话情绪识别 算法原理 BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年开发的一种预训练语言表示模型。BERT的核心原理是通过在大量文本上预训练深度双向表示&#xff0…...

【精品资料】模块化数据中心解决方案(33页PPT)

引言:模块化数据中心解决方案是一种创新的数据中心设计和部署策略,旨在提高数据中心的灵活性、可扩展性和效率。这种方案通过将数据中心的基础设施、计算、存储和网络资源封装到标准化的模块中,实现了快速部署、易于管理和高效运维的目标 方案…...

N6 word2vec文本分类

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊# 前言 前言 上周学习了训练word2vec模型,这周进行相关实战 1. 导入所需库和设备配置 import torch import torch.nn as nn import torchvision …...

excel、word、ppt 下载安装步骤整理

请按照我的步骤开始操作,注意以下截图红框标记处(往往都是需要点击的地方) 第一步:下载 首先进入office下载网址: otp.landian.vip 然后点击下载 拉到下方 下载站点(这里根据自己的需要选择下载&#x…...

【python学习】标准库之日期和时间库定义、功能、使用场景和示例

引言 datetime模块最初是由 Alex Martelli 在 Python 2.3 版本引入的,目的是为了解决之前版本中处理日期和时间时存在的限制和不便 在datetime模块出现之前,Python 主要使用time模块来处理时间相关的功能,但 time模块主要基于 Unix 纪元时间&…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

条件运算符

C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...