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

InnoDB存储引擎(1)

InnoDB存储引擎的优点

InnoDB在设计时考虑到了处理大数据量时的性能,支持事务,回滚和崩溃修复的能力,通过多版本并发控制来减少锁定(降低了锁的争用),同时还支持外键的约束;通过缓冲池在内存中缓存数据来提高查询的性能;可以每个表使用各自的独立表空间存储数据并且文件大小只受限于操作系统.

总结:InnoDB存储引擎存储的数据量大,性能高,可以有效的保证数据安全。

InnoDB的架构

InnoDB主要包括内存结构和磁盘结构。

内存结构

  • 缓冲池:内存中的主要工作区域,优化查询的性能。
  • 变更缓冲区:优化修改操作的性能。
  • 日志缓冲区
  • 自适应哈希索引:当某一查询语句的执行次数达到mysql设定的阈值时,mysql会将查询语句和对应的结果集映射起来,从而进一步提升查询的性能。

磁盘结构

系统表空间,独立表空间,通用表空间,临时表空间,撤销表空间,保存的都是真实的数据。

重做日志,双写缓冲区。

为什么要设计成内存结构和磁盘两部分

数据库的作用就是保存数据,用户的真实数据最终都会保存在磁盘当中,但是磁盘的IO速度慢,为了提高访问数据的效率,InnoDB会将查询到的数据缓存到内中,当再次查询时,如果目标数据已经存在于内存中,则直接在内存中读取。

磁盘结构中的文件用来保存数据实现数据持久化;内存结构用来缓存数据提升查询效率。

使用InnoDB存储引擎创建的表对应的数据文件在哪里

当创建一个数据库时,会在数据目录生成一个与数据库同名的子目录。

当创建一个表时,默认会在对应的数据库子目录中生成相应的表空间文件,以表名为文件名,以ibd为文件后缀,用来存储数据和索引。

如果每个表都对应一个表空间文件,则称为独立表空间,在5.7版本之后,默认会为每个表生成独立表空间,可以通过innndb_file_per_table = [on|off] 来进行控制,如果为off,则会将所有的表的数据都存储在系统表空间中。

Mysql的存储结构

Mysql的存储结构是指MySQL为了有效的维护数据而定义的一系列的数据结构。

用户数据在表空间中如何存储?

用户的数据以数据行的方式存储在对应的表空间文件中,为了方便管理,表空间由段,区组,区,页和数据行组成。

若干个数据行组成了页,多个页组成了区,多个区组成了区组,多个区组组成了段,多个段组成表空间。

页是InnoDB磁盘管理的最小单位,内存每次至少读取一个页。

为什么要用页这个数据管理单元?

页是mysql应用层的概念,是mysql根据自身的应用场景而定义的一种数据结构。

页的大小默认为16KB(4个数据块的大小),作为磁盘管理的最小单位。

每次内存与磁盘的交互至少读取一页,所以在磁盘中每个页内部的地址都是连续的。

即使只需要查询一条数据,但是从磁盘上读取了16kb,根据空间局部性原理,也不会造成资源的浪费。

所以,使用页最主要的目的是为了减少磁盘IO,提高性能。

数据页的基本特性

页的默认大小是16KB,可以适用于大多数场景,也可以根据核心表中数据行的大小来调整数据页的大小,调整的大小必须是4kb数据块的整数倍。

每一个页中,即使没有数据也会使用16kb的存储空间,同时与索引的B+树中的节点对应。

MySQL中有多种不同类型的页,但不论哪种类型都会包含页头和页尾,页头和页尾之间的页主体信息根据不同的类型有不同的结构。

查询的数据超过一页的大小,怎么提高查询效率?

拆分成三个问题:

不同的页在磁盘中是不是连续的?

不一定,在不做任何控制的情况下,不同页在磁盘中申请的地址大概率是不同的。

为什么不连续的地址会降低查询的效率?

访问不连续的地址会产生磁盘的随机访问,这是影响效率的主要因素。

扇区是磁盘中存储数据的最小单位,每个扇区大小固定为512B,如果读取某个扇区的数据,分为两步:1.先转动机械臂杆。让磁头找打对应的磁道。2.通过转轴带动盘面的转动找到对应的扇区。

InnoDB如何保证页在磁盘中的连续性?

为了解决磁盘随机访问低效的问题,需要尽可能在磁道上读取连续的数据,来减少磁头的移动,所以MySQL使用区来管理页,每个区(默认是连续的1MB的空间)存放固定数量的页,如果需要跨页读数据,那么大概率就在附近的地址,大幅减少磁头的移动。

综上,跨页查询的三种情况:

  1. 页在区内是相邻的:磁盘顺序IO,大幅提升效率。
  2. 页在区内,但不相邻:大幅减少磁头的移动,可以提升效率。
  3. 页在不同的区:随机IO,不能提升效率。

区和页的关系:区是用来管理页的一种数据结构,其中包含若干个页,从而保证页与页之间的连续性。

当表中的数据很少时如何避免空间的浪费?

通过碎片页和零散区避免空间的浪费。

当创建表时,由于不知道表的数据量级,为了节省空间,最初只会创建7个初始页,而不是一个完整的区。

零散页会放在表空间的碎片区,随着数据量的增加,会申请新的页来存储数据,当碎片去的页超过32个时,才会申请完整的区来存储更多的数据。

如果访问的数据跨区了怎么办?

使用区组结构有效的管理区,每个区组固定管理256个区(256MB),区组条目信息中会记录每个区的偏移量并用双向链表连接。

区组管理区不会像区管理页那样,实现页在物理地址的连续性,一下子申请256MB太大了,所以不同的区在磁盘上大概率是不连续的。

逻辑结构-段

段是一个逻辑概念,作用是管理不同的区和碎片区中的页。

段主要分为叶子节点段和非叶子节点段,对应索引中的叶子,非叶子节点。

相关文章:

InnoDB存储引擎(1)

InnoDB存储引擎的优点 InnoDB在设计时考虑到了处理大数据量时的性能,支持事务,回滚和崩溃修复的能力,通过多版本并发控制来减少锁定(降低了锁的争用),同时还支持外键的约束;通过缓冲池在内存中缓存数据来提高查询的性能&#xff…...

VMWare虚拟机共享主机的网络访问外网

1.主机中启动客户端并连接外网 2.设置虚拟网络类型为NAT 3.启动虚拟并通过主机访问外网...

LeetCode Easy|【415. 字符串相加】

力扣题目链接 题目本身难度不大,但是后续的一些补充内容还是值得搞清楚的 主要的逻辑如下: 其实本题的目的就是让我们来模拟我们的竖式加法。所以很直观的一个想法就是使用双指针:分别指向两个 num 的末尾。随后就会产生一些问题&#xff1a…...

RAG 革命:NVIDIA 工作站如何成为企业 AI 的秘密武器

在深圳的一家科技初创公司,首席技术官李梅正在向她的团队展示一个令人兴奋的新项目。“看这个,” 她指着屏幕上的实时演示说,“我们刚刚用公司的技术文档训练了一个 AI 助手,它现在可以回答任何关于我们产品的问题,而且…...

九大原则,轻松构建个人高效SOP

1、原则一、工作汇报SOP SCQA模型(升职加薪的关键!) 清晰定义问题和提出解决方案 类别 关键词 解读 S - Situation 情景 陈述项目背景,目标,愿景 C - Complication 冲突 讲卡点,讲冲突 Q - Question 疑问-问题 这些冲…...

Airtest的demo实现多设备并行

Airtest的demo实现多设备并行 它实现是的获取adb连接上的所有设备,然后在每一台设备上跑给定的测试用例,跑完之后生成单机的测试报告,最后再汇总这些单机测试报告的结果,形成汇总(聚合)报告: 同…...

社区养老服务小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,服务人员管理,服务产品管理,服务预约管理,服务状态管理,服务退订管理,活动管理,视频管理 微信端账号功能包…...

Interceptor拦截器开发

因为1登录后的接口都需要token验证代码,会出现重复代码;2当前的接口不防刷,会被恶意攻击 所以在controller层增加请求拦截,如果你的token不合法,就不让你做后续的处理了 拦截器的作用是什么 作用: 1、对controller层代码的访问进行拦截,合法的请求,那此层代码就处理,反…...

美团 AIGC产品经理面经(已拿 offer)

背景:211本科毕业,毕业之后在北京一家中型电商公司做了3年商家后台产品经理,目前通过老薛的朋友关系拿到了美团的offer。 目前还有几家在面试流程中,继续加油💪 美团AIGC产品面经-业务面 💥1、自我介绍&a…...

@RequestBody与@RequestParam

RequestBody会将请求体中的数据,转换成对象.最主要的是RequestBody就是要返回Json的字符串!!! RequestParam会从http请求查询参数中提取数据! RequestParam和RequestBody是Spring Framework中用于处理HTTP请求的注解…...

vmware上,虚机经常丢失网卡。导致无法上网。

1、winR 输入 services.msc 2、重启这两个服务。 VMware NAT service和VMware DHCP service...

git 鉴权失败

这条错误信息通常出现在使用Git进行远程操作时,比如克隆仓库、拉取更新或推送代码。错误的含义是: HTTP Basic: Access denied:访问被拒绝。The provided password or token is incorrect:提供的密码或令牌不正确。Your account …...

[C++] 容器适配器:深入理解Stack与Queue的底层原理

文章目录 容器适配器简介deque的缺陷为什么使用deque作为stack和queue的底层默认容器 stack和queue的简单讲解Stack(栈)栈的操作图示栈的相关接口 Queue(队列) Stack和Queue的模拟实现Stack(栈)作为容器适配…...

Eclipse maven 的坑

在使用 eclipse 时, eclipse 的右下角 一直在提示 “JPA java change event handler” ,eclipse使用起来很卡,解决办法 问题描述: 在使用 eclipse时, eclipse 的右下角 一直在提示 “JPA java change event handler”…...

多模态视觉大语言模型——LLaVA

论文题目:Visual Instruction Tuning 论文地址:https://arxiv.org/abs/2304.08485 github: https://github.com/haotian-liu/LLaVA 1. Abstract 本文首次尝试使用GPT-4生成多模态指令数据,并基于这些数据训练了LLaVA(Large Language and Vision Assistant)模型,这是一种结…...

服务注册到nacos上,不能点击下线的问题处理

nacos不能下线: 修改 /usr/local/mid/nacos/data 文件夹下 protocol 文件重命名为 protocol_bak,然后再重启nacos nacos单机启动命令:cd sh startup.sh -m standalone nginx启动命令:cd /usr/local/mid/nginx/sbin ./…...

未来3-5年,哪些工作会被AI取代

一篇由高盛经济学家约瑟夫布里格斯 (Joseph Briggs)和德维西科德纳尼 (Devesh Kodnani)撰写的报告指出,全球预计将有3亿个工作岗位被生成式AI取代。 报告称:“最近出现的生成式人工智能将降低劳动力成本和…...

鸿蒙系统开发【网络管理】

网络管理 介绍 此Demo展示如何查询网络详情、域名解析、网络状态监听等功能。 效果预览: 使用说明: 1.启动应用,在点击检查网络、网络详情、网络连接信息后,展示对应的信息; 2.在域名解析的模块下,输入…...

nginx如何处理请求

nginx如何处理请求 注:内容翻译自Nginx官网文档 How nginx processes a request。 基于名称的虚拟服务器 nginx首先要决定哪个服务器应该处理请求。让我们从一个简单的配置开始,三个虚拟服务器都监听在端口*:80: server {listen 80;server_name e…...

换地不换IP?揭秘微博IP地址的奥秘

在这个信息飞速传递的时代,社交媒体成为我们生活中不可或缺的一部分。微博,作为其中的佼佼者,不仅是我们获取资讯的重要渠道,也是展现自我、分享生活的重要平台。然而,你有没有遇到过这样的情况:明明已经换…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

企业如何增强终端安全?

在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...

DiscuzX3.5发帖json api

参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...