【转】2.3【MySQL】运行原理(三)InnoDB 逻辑存储结构

MySQL的存储结构分为5级:表空间、段、簇、页、行。

在这里插入图片描述

1.表空间 TableSpace

上篇【MySQL】从InnoDB的内存结构、磁盘结构到update sql执行过程分析 在磁盘结构部分就说过了,表空间可以看做是InnoDB 存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。分为:系统表空间、独占表空间、通用表空间、临时表空间、Undo表空间。

2.段 Segment

表空间是由各个段组成的,常见的段有数据段、索引段、回滚段等,段是一个逻辑的概念。一个ibd文件(独立表空间文件)里面会由很多个段组成。

创建一个索引会创建两个段,一个是索引段:leaf node segment,一个是数据段:non-leafnodesegment。索引段管理非叶子节点的数据。数据段管理叶子节点的数据。也就是说,一个表的段数,就是索引的个数乘以2。

3.簇 Extent

一个段(Segment)又由很多的簇(也可以叫区)组成,每个区的大小是1MB(64个连续的页)。每一个段至少会有一个簇,一个段所管理的空间大小是无限的,可以一直扩展下去,但是扩展的最小单位就是簇。

4.页 Page(重点)

为了高效管理物理空间,对簇进一步细分,就得到了页。簇是由连续的页(Page)组成的空间,一个簇中有64个连续的页。 (1MB/16KB=64)。这些页面在物理上和逻辑上都是连续的。

跟大多数数据库一样,InnoDB也有页的概念(也可以称为块),每个页默认16KB。页是InnoDB存储引擎磁盘管理的最小单位,通过innodb_page_size设置。一个表空间最多拥有2^32个页,默认情况下一个页的大小为16KB,也就是说一个
表空间最多存储64TB的数据。

注意,文件系统中,也有页的概念。操作系统和内存打交道,最小的单位是页Page。文件系统的内存页通常是4K。

在这里插入图片描述

SHOW VARIABLES LIKE 'innodb_page_size';

在这里插入图片描述

假设一行数据大小是1K,那么一个数据页可以放16行这样的数据。下面的示例就用每页放3行数据:

在这里插入图片描述

由于索引属于二叉查找树,所以索引字段是有序的。往表中插入数据时

  • 如果一个页面已经写完,产生一个新的叶页面(如果一个簇的所有的页面都被用完,会从当前页面所在段新分配一个簇)
  • 如果数据不是连续的,往已经写满的页中插入数据,会导致叶页面分裂

在这里插入图片描述

5.行 Row

InnoDB 存储引擎是面向行的(row-oriented),也就是说数据的存放按行进行存放。

文件格式行格式描述
Antelope(Innodb-base)ROW_FORMAT=COMPACT
ROW_FORMAT=REDUNDANT
Compact 和 redumdant 的区别在就是在于首部的存 存内容区别。 compact的存储格式为首部为一个非NULL的变长字段长度列表
redundant 的存储格式为首部是一个字段长度偏移 列表(每个字段占用的字节长度及其相应的位移)。
在 Antelope 中对于变长字段,低于 768 字节的,不 会进行 overflowpage 存储,某些情况下会减少结果集 IO.
Barracuda(Innodb-plugin)ROW_FORMAT=DYNAMIC
ROW_FORMAT=COMPRESSED
这两者主要是功能上的区别功能上的。 另外在行里的变长字段和 Antelope 的区别是只存 20 个字节, 其它的 overflowpage 存储。
另外这两都需要开启 innodb_file_per_table=1

innodb_file_format 在配置文件中指定;

show variables like "%innodb_file_format%"; 
SET GLOBAL innodb_file_format=Barracuda;

在这里插入图片描述

row_format则在创建数据表时指定

CREATE TABLE tf1 
(c1 INT PRIMARY KEY) 
ROW_FORMAT=COMPRESSED 
KEY_BLOCK_SIZE=8;

查看行格式(注:需要在命令行操作):

SHOW TABLE STATUS LIKE 'tf1'\G;
  • 在这里插入图片描述

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

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

相关文章

layui templet格式化_layui数据表格日期如何格式化成2012-12-30这样的?

test学生评优评先系统学生信息管理学生信息查询学生信息添加注册登录查看编辑删除$(function () {layui.use("table", function () {var $table layui.table;//第一个实例$table.render({elem: #stu,height: 300,//数据接口,url: /stu/student/getAllClazz,//开启分…

【转】【MySQL】运行原理(四):重做日志(redo log),回滚日志(undo log),二进制日志(binlog)

MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log&…

python 读中文乱码_python字符乱码的解决小结

引言无论学习什么程序语言,字符串这种数据类型总是着有非常重要。然而最近在学习python这门语言,想要显示中文,总是出现各种乱码。于是在网上查了很多资料,各说纷纭,我也尝试了许多的方法,有时候可以正常显…

【转】关于国密算法 SM1,SM2,SM3,SM4 的笔记

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。 SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。 SM2为非对称加密…

ntnub原理怎么看_老电工由浅入深带你入门学PLC的工作原理和梯形图的编程规则...

PLC编程怎么学?很难吗?工控小白怎么入门学习PLC?需要为学习PLC编程做哪些准备?学习PLC编程时,前期一定要积累相关的理论知识,有了一定的基础,基础打扎实之后就是多练习了。今天推荐的重点&#…

【转】国密加密算法SM系列的C#实现方法

http://www.zhimengzhe.com/bianchengjiaocheng/Javabiancheng/22144.html 在网上搜索SM实现方法,按照上面网站提供方法总是出错,经过调试终于修改好了,给大家以参考,不走弯路了 base64修改,这个看需求,如…

1盒子刷webpad_拉宽带送的盒子也有春天:一招解放各种束缚限制

序言:故事要从一年多前开始说起了,话说...装了宽带之后,移动送了个电视盒子,一次未使用,角落吃灰一年多了,最近有个大胆的想法!其实是被逼迫无奈,孩子总是喜欢拿我手机刷抖音&#x…

【转】C#实现SM2国密加密

本文主要讲解“国密加密算法”SM系列之SM2的C#实现方法,加密规则请详阅国密局发布的文档。 首先需第三方Nuget包:Portable.BouncyCastle (源码来自http://www.bouncycastle.org/csharp/) SM2的加密需使用到SM3加密处理 1.1 SM2…

php udp发送和接收_63、php利用原生socket创建udp服务

1、案例函数汇总2、案例通过socket创建udp服务,获取对端的ip和port信息。并进行打印2.1、udp服务源码/*** Copyright(C) Iamasb* project : 3、workerman相关知识点* explain : 原生socket创建创建udp服务* filename : socket_udp.php* author : Iamasb*/// 创建udp…

【转】C#实现SM3国密加密

C#实现SM3国密加密 本文主要讲解“国密加密算法”SM系列之SM3的C#实现方法,加密规则请详阅国密局发布的文档。 首先需第三方Nuget包:Portable.BouncyCastle (源码来自http://www.bouncycastle.org/csharp/) 1.1常规处理 /// &l…

mq集群要建传输队列吗_面试官:消息队列这些我必问!

作者:mousycodersegmentfault.com/a/1190000021054802消息队列连环炮项目里怎么样使用 MQ 的?为什么要使用消息队列?消息队列有什么优点和缺点?kafka,activemq,rabbitmq,rocketmq 都有什么去呗?如何保证消息队列高可用…

【转】国密算法sm4 CBC模式加解密

一.什么是CBC模式? CBC模式的全称是Cipher Block Chaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组像链条一样相互连接在一起。 在CBC模式中,首先将明文分组与前一个密文分组进行异或运算&#xff0c…

oracle数据库连接时报12514_连接Oracle数据库时报ORA-12541:TNS:无监听程序的图文解决教程...

在用PL/SQL Developer等客户端工具连接oracle服务器时出现ORA-12541:TNS:无监听程序的错误,如下图:发现原来是oracle的监听没有启动,重启监听后就连接成功了,下面跟大家分享一下如何启动oracle的监听。1.在安装Oracle服务器的主机上,打开Net Configuration Assistan…

【转】对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)

版权声明:本文为作者原创,如需转载,请注明出处https://blog.csdn.net/weixin_42940826注:以下图片来自于《图解密码学》,这本书讲的更全面细致,建议阅读,在我资源库中有此书,还有使用…

中发生数据丢失_如何防止Redis脑裂导致数据丢失?

所谓的脑裂,就是指在主从集群中,同时有两个主节点,它们都能接收写请求。而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客户端会往不同的主节点上写入数据。而且,严重的话&a…

【转】C#实现SM4国密加密

本文主要讲解“国密加密算法”SM系列之SM4的C#实现方法&#xff0c;加密规则请详阅国密局发布的文档。 首先需第三方Nuget包&#xff1a;Portable.BouncyCastle &#xff08;源码来自http://www.bouncycastle.org/csharp/&#xff09; 1.1 SM4主类 /// <summary>/// //…

vscode怎么自动将px转换成vw_基于react/vue移动端适配之px自动转rem、vw

作为一名前端开发&#xff0c;在做移动端适配时rem、vw是我们经常用到的单位&#xff0c;但是我们在实际开发过程中需要将设计稿上的px转换成rem&#xff0c;如果手动去计算&#xff0c;将是一个很耗时、费力的过程。这是就需要一个工具可以帮我们自动将px转成rem、vw。开始之前…

【转】TransactionScope事务简介

在.NET 1.0/1.1 版本我们使用SqlTransaction.处理事务 string connString ConfigurationManager.ConnectionStrings["db"].ConnectionString; using (var conn new SqlConnection(connString)) { conn.Open(); using (IDbTransaction tran conn.BeginTransact…

后台接收datetime_input上传date日期时间数据到后台报400怎么办?

前端上传日期时间数据到后台时&#xff0c;上传失败我这里是用里存放时间&#xff0c;上传到后台的controller方法时&#xff0c;参数类型是java.util.Date&#xff0c;发现没有到controller方法里面。报错&#xff1a;不能将String转成Date。我想错误的原因是前端传上来的是St…

【转】C#中使用TransactionScope类(分布式事务) 和 锁

如果在C#中使用TransactionScope类(分布式事务),则须注意如下事项: 1、在项目中引用using System.Transactions命名空间&#xff08;先要在添加net组件的引用&#xff09;; 2、具体示例如下&#xff1a; public static void sendMessage(){ TransactionOptions tran…