mysql中的innodb存储结构

news2024/9/21 16:36:30

什么是InnoDB存储引擎

InnoDB是MySQL的默认存储引擎,它是一个事务安全的存储引擎,支持行级锁定和外键约束。InnoDB为MySQL提供了高性能、高可靠性和高可用性的解决方案。

InnoDB 的核心特点和功能

  • 事务支持:InnoDB支持ACID事务特性,保证了数据的一致性和完整性。
  • ACID 属性
    • 原子性 (Atomicity):确保事务中的所有操作要么全部完成,要么全部不做。
    • 一致性 (Consistency):确保事务完成后数据库处于一致的状态。
    • 隔离性 (Isolation):确保并发事务之间互不干扰,每个事务在执行时都不会看到其他事务的中间状态。
    • 持久性 (Durability):确保一旦事务提交,其结果是永久性的,即使发生系统崩溃也不会丢失。
  • 行级锁定:InnoDB使用行级锁定,只有被修改的行会被锁定,提高了并发性能。
  • 外键支持:InnoDB支持外键约束,有助于维护数据的完整性。
  • 崩溃恢复:InnoDB提供了崩溃恢复能力,即使在系统崩溃后也能保证数据的完整性。
  • 性能优化:InnoDB通过多种机制优化性能,如缓冲池、自适应哈希索引等。

逻辑存储结构

InnoDB 逻辑存储单元主要分为:表空间(Tablespaces)、段(Segments)、区(Extent)、页(Page)、行(Row)

  1. 表空间:InnoDB使用表空间来管理存储表和索引的数据文件。每个表空间包含一个或多个数据文件,这些文件实际上存储数据表和索引
  2. 段:InnoDB将每个表空间划分为多个段,用于存储不同类型的数据。主要的段类型包括数据段、索引段、回滚段和系统段。数据段就是B+树的叶子节点, 索引段即为B+树的 非叶子节点
  3. 区:每个段由一组区组成,每个区的大小通常为1MB。区是InnoDB中进行磁盘读写的最小单元,它包含了一组连续的数据页
  4. 页:区又由一组页组成,通常为16KB大小。页是InnoDB存储数据的最小单位,它可以包含表的行数据、索引数据以及其他管理信息
  5. 行:InnoDB使用"B+树"索引结构来组织数据。数据行存储在表的叶子页中,每一行代表一条记录。行数据包括所有列的值以及一些额外的管理信息

架构

内存结构

InnoDB的底层结构主要由内存结构和磁盘结构组成。

  1. Buffer Pool (缓冲池):它是 InnoDB 的核心组件之一,用于缓存表的数据页和索引页,减少对磁盘 I/O 的访问次数。缓冲池中的数据页在事务提交时会根据需要刷新到磁盘。

  2. Change Buffer(变更缓冲区):对于非唯一二级索引的插入操作,如果所在的数据页尚未加载到缓冲池中,InnoDB 会将这部分修改暂存在变更缓冲区中,待后续数据页加载到缓冲池时再合并写入。

  3. Adaptive Hash Index(自适应哈希索引):InnoDB 会根据查询模式自动生成哈希索引,加快某些查询的性能。

  4. Log Buffer(日志缓冲区):存储待写入重做日志文件(redo log)的事务日志记录,以确保事务的持久性和崩溃恢复能力。

 磁盘结构

  1. System Tablespace(系统表空间): 系统表空间是数据库管理系统(DBMS)中的一个重要组件。它包含了系统表、用户表的元数据以及其他系统级数据。系统表空间通常以文件的形式存在,例如在MySQL中,系统表空间通常是由一个或多个.ibd或.frm文件组成。系统表空间对于数据库的正常运行至关重要。
  2. File-Per-Table Tablespaces(独立表空间): 在一些数据库系统(如MySQL的InnoDB存储引擎)中,可以配置为每个表使用独立的表空间文件。这种配置方式称为"File-Per-Table"。每个表拥有自己的表空间文件,包括数据和索引。这种设计使得表的备份和恢复更加方便,并提供更好的性能和扩展性,同时减少数据碎片化的问题。
  3. General Tablespaces(通用表空间): 通用表空间是MySQL 5.7版本中引入的特性。通用表空间允许将多个表存储在一个或多个共享表空间文件中。这种方式便于管理和维护数据库对象,可以更灵活地进行数据迁移和备份。
  4. Undo Tablespaces(撤消表空间): 撤消表空间用于存储事务的撤消日志,也被称为回滚日志。在数据库中,事务修改数据时,撤消日志记录了对数据所做的修改,以便在回滚操作或崩溃恢复时撤销或恢复事务。
  5. Temporary Tablespaces(临时表空间): 临时表空间用于存储临时表、排序和哈希操作等过程中的临时数据。这些临时数据在操作完成后会自动清除,临时表空间通常具有较高的性能要求。
  6. Doublewrite Buffer Files(双写缓冲): 双写缓冲是InnoDB存储引擎中的一项机制,用于提高数据的写入可靠性。当InnoDB执行写入操作时,会先将数据写入双写缓冲区(一个内存缓冲区),然后再异步地将数据写入磁盘,以保证数据的一致性和可靠性。
  7. Redo Log(重做日志): 重做日志是数据库管理系统中的一种日志机制,用于记录已经发生的事务操作。在数据库发生故障或崩溃时,通过重做日志可以将未提交的事务重新应用到数据库,恢复到故障发生前的状态。重做日志通常以文件的形式存在,是数据库持久性和可恢复性的重要保障。

总结:

1、InnoDB引擎的结构分为内存结构和磁盘结构。
2、内存结构由缓冲池(Buffer Pool),写缓冲(Change Buffer),日志缓冲( Log Buffer),自适应hash索引(Adaptive Hash Index)组成。
3、缓冲池(Buffer Pool)主要是缓存表数据与索引数据,加快访问速度。内部采用基于LRU算法的变体算法来管理缓存对象。
4、写缓冲(Change Buffer)主要是缓存辅助索引的更新操作,加快辅助索引的更新速度。
5、日志缓冲( Log Buffer)使大型事务可以运行,而无需在事务提交之前将redo日志数据写入磁盘,节省了磁盘I/O。注意事务提交时刷redo log有三种策略。

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

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

相关文章

[算法题]【模板】前缀和/【模板】二维前缀和

题目链接: 【模板】前缀和 / 【模板】二维前缀和 两道前缀和模板题. 【模板】前缀和: 定义一维前缀和数组: presum[i]: 表示 1 - i 位置的和 状态转移方程: presum[i] presum[i - 1] arr[i - 1] 定义数组时多开一个位置, 下标位置从 1 开始计算, 不从 0 开始是为了避免越界…

我眼中的胶水工作:挑战与机遇并存

我眼中的胶水工作:挑战与机遇并存 胶水工作,看似不起眼,却如同团队运作的隐形脉络,起着至关重要的连接作用。它涵盖了各种各样的任务,从注意到团队成员的阻碍并伸出援手,到审查设计文档,再到新…

实现微信的订阅消息或模板消息API来实现实时通知(服务通知)

实现微信的订阅消息或模板消息API以实现实时通知,需要经过几个关键步骤,包括用户订阅、消息发送和接收消息事件。以下是具体实现流程: 1. 用户订阅消息 首先,需要让用户订阅消息。这通常通过前端代码触发一个授权请求来完成&am…

C:每日一题:字符串左旋

题目:实现一个函数,可以实现字符串的左旋 例如:ABCD左旋一个字符就是BCDA;ABCD左旋两个字符就是CDAB; 1、解题思路: 1.确定目标旋转k个字符,我们要获取字符串的长度 len,目的是根…

8.14 day bug

bug1 好家伙,折腾一个小时没通过,原来是代码写多了 // 定义初始状态 const defaultState {login: false };// 定义 reducer const reducer (state defaultState, action) > {if (action.typeLOGIN) {// 当接收到 LOGIN action 时,更新…

备战秋招60天算法挑战,Day20

题目链接: https://leetcode.cn/problems/reverse-bits/ 视频题解: https://www.bilibili.com/video/BV1W2421Z7bi/ LeetCode 190.颠倒二进制位 题目描述 颠倒给定的 32 位无符号整数的二进制位。 举个例子: 输入:n 00000010…

Nginx--简介、安装、常用命令和配置文件

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、Nginx简介 1、nginx介绍 Nginx (engine x) 是一个高性能的 HTTP 和 反向代理 服务,也是一个IMAP/POP3/SMTP服务。因它的稳定性、丰…

分布式锁实现方案--redis、zookeeper、mysql

分布式锁的几种实现方式 悲观锁和乐观锁分布式锁的实现要求 -- 互斥性、避免死锁、可重入性、高可用行、性能互斥-只能有一个客户端持有锁 -- redis setnx避免死锁引入过期时间 -- redis ttl锁过期问题 -- 自动续期 -- redis释放别人锁问题 -- 锁附加唯一性 -- 给每个客户端设置…

【嵌入式linux开发】智能家居入门6:最新ONENET,物联网开放平台(QT、微信小程序、MQTT协议、ONENET云平台、旭日x3派)

智能家居入门6:最新ONENET物联网开放平台 前言最终现象一、ONENET云平台创建产品与设备二、使用MQTT客户端软件测试2.1 测试前的准备2.2 测试 三、LInux QT代码四、onenet 云端API介绍及微信小程序代码4.1 onenet API介绍4.2 微信小程序代码 五、板端运行 前言 ONE…

LeetCode 热题100-24

回文链表 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2: 输入&#xff…

四层负载企业实战

通过四层负载LVSkeepalived将请求转发到nginx代理服务器。通过代理服务器访问后端真实应用服务。 拓补图: 准备环境6台机器; lvskeepalived---两台 nginx代理 ---两台 tomcat----一台 php ----一台 所有机器关闭防火墙和selinux 所有机器解析如下…

APP安全检测报告内容详解

一、APP安全检测的必要性 APP安全检测是确保移动应用安全的重要一环。在开发过程中,由于技术、人员和管理等方面的原因,APP可能存在各种安全漏洞和风险。这些漏洞一旦被黑客利用,可能导致用户数据泄露、恶意代码注入、应用被篡改等严重后果。…

Windows下使用QT5.14.2编译MySQL8.0对应的最新64位驱动程序步骤

不得不说mysql更新的速度是真的快,最近一两年都更新了好几个的小版本了。如果安装了高版本的 mysql软件,低版本的驱动就不支持了,因此需要重新使用QT来编译对应的mysql驱动。具体办法如下: 1、官网下载最新的mysql8.0安装包。下载…

day04--js的综合案例

1.1 商品全选 需求&#xff1a;商品全选 1. 全选 &#xff1a;点击全选按钮,所有复选框都被选中 2. 全不选 &#xff1a;点击全不选按钮,所有复选框都被取消选中 3. 反选 &#xff1a; 点击反选按钮,所有复选框状态取反 <!DOCTYPE html> <html lang"en">…

智慧校园云平台电子班牌系统源码,智慧教育一体化云解决方案

智慧校园云平台电子班牌系统&#xff0c;利用先进的云计算技术&#xff0c;将教育信息化资源和教学管理系统进行有效整合&#xff0c;实现生态基础数据共享、应用生态统一管理&#xff0c;为智慧教育建设的统一性&#xff0c;稳定性&#xff0c;可扩展性&#xff0c;互通性提供…

利用PDAL库实现Las文件向PLY文件的转换

1、官网的下载链接 PDAL&#xff08;Point Data Abstraction Library&#xff09;是一个开源的C库&#xff0c;专门用于处理三维点云数据。它提供了数据读取、转换、过滤、统计分析等多种功能&#xff0c;支持多种数据格式&#xff0c;如LAS、LiDAR、ASCII等。在IT行业中&…

Java常用集合(List、Map)类型相关问题整理

一、背景 针对Java基础集合的部分&#xff0c;对一些常见的问题进行整理&#xff0c;方便后续能够随时复习 二、问题与回答 &#xff08;1&#xff09;Java集合类ArrayList初始化时数组的默认长度是多少&#xff1f; 答&#xff1a;在new ArrayList() 这段代码执行完后&a…

类Unix环境在Windows上的演进史

自从以Unix为基础的操作系统被发明以来&#xff0c;尝试在Windows环境中模仿Unix操作的工具就一直存在。这种需求源于许多原因&#xff0c;包括Unix对脚本和命令行工具的强大支持&#xff0c;以及Unix和Linux系统在科学、工程和其他技术领域的广泛使用。下面就让我们一起探讨下…

input[type=checkbox]勾选框自定义样式

效果图&#xff1a; <template> <input class"rule-checkbox" type"checkbox" checked v-model"isChecked" /> </template><script setup lang"ts"> import { ref } from vue; const isChecked ref(); </…

应急响应-DDOS-技术指南

初步预判 通常&#xff0c;可从以下几方面判断服务器/主机是否遭受DDoS攻击查看防火墙、流量监控设备、网络设备等是否出现安全告警或大量异常数据包。如图所示&#xff0c;通过流量对比&#xff0c;发现在异常时间段存在大量UDP数据包&#xff0c;并且与业务无关。 通过安全设…