当前位置: 首页 > 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地址的奥秘

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

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

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

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