设为首页 加入收藏

TOP

MySQL 5.7基础之innodb存储引擎总结(二)
2018-11-25 16:13:36 】 浏览:332
Tags:MySQL 5.7 基础 innodb 存储 引擎 总结
r_table来设置,使得每一个表都对应一个自己的独立表空间文件,而不是存储到公共的ibdata1文件中。独立的表空间文件之存储对应表的B+树数据、索引和插入缓冲等信息,其余信息还是存储在默认表空间中。


  这个文件所存储的内容主要就是B+树(索引),一个表可以有多个索引,也就是在一个文件中,可以存储多个索引,而如果一个表没有索引的话,用来存储数据的被称为聚簇索引,也就是说这也是一个索引。最终的结论是,ibd文件存储的就是一个表的所有索引数据;


2、段:


  段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引、表、回滚段的基本元素。创建一个索引(B+树)时会同时创建两个段,分别是内节点段和叶子段,内节点段用来管理(存储)B+树非叶子(页面)的数据,叶子段用来管理(存储)B+树叶子节点的数据;也就是说,在索引数据量一直增长的过程中,所有新的存储空间的申请,都是从“段”这个概念中申请的。一个索引,包括两个段,那么一个表的段的数目就是索引的个数乘以2了。(更形象的解释:ibd文件,就是由多个段组成的,没有任何其他空间是脱离了段的管理。)


3、簇:


  innodb引入了簇的概念,在代码中被称为extent;


  簇是构成段的基本元素,一个段由若干个簇构成。一个簇是物理上连续分配的一个段空间,每一个段至少会有一个簇,在创建一个段时会创建一个默认的簇。如果存储数据时,一个簇已经不足以放下更多的数据,此时需要从这个段中分配一个新的簇来存放新的数据。一个段所管理的空间大小是无限的,可以一直扩展下去,但是扩展的最小单位就是簇。簇的空间大小是固定的,一般是64个页面;(簇是实际的物理存储空间)


4、页面:


  “页面”是簇细分之后的产物,它是簇的组成单位,也是段所管理的最小单位、数据文件管理的最小单位,当然也是文件中空间分配的最小单位。


  一个簇中可以包括多个页面(默认为64个页面,每个页面是16KB),这个页面数通常被叫做“簇的大小”。这些页面都归这个簇管理,在逻辑上(页面号都是从小到大连续的)及物理上都是连续的。在向表中插入数据时,如果一个页面已经被写完,系统会从当前簇中分配一个新的空闲页面处理使用,如果当前簇中的64个页面都被分配完,系统会从当前页面所在段中分配一个新的簇,然后再从这个簇中分配一个新的页面来使用;(更简单的说:表空间文件就是被划分成相等长度的块,每一个块就是一个页面,一个页面默认为16KB,一个文件中没有任何空间是脱离了段的管理而存在的)


---注意:没有任何空间不是一页面的形式而存在的。


5、段、簇、页面组织结构:


  一个表空间可以有多个文件,每个文件都有各自的编号,创建一个表空间时,至少有一个文件,这个文件被称为“0号文件”。一个文件是被切割为等长“默认16KB”的块,这个块通常被称为页面,那么在“0号文件”的第一个页面(page_no为0)中,存储了这个表空间中所有段簇也管理的入口,那么在这个页面存储的数据就是16KB,但通常会有页面头信息会占用一些空间,真正的管理信息数据是从页面偏移为fil_page_data(38)的位置开始的,这个位置存储了表空间的描述信息;


---注意:


①:表空间控制信息有:满簇链表、半满簇链表、空闲簇链表,而段的inode信息中也有这些信息;表空间中的链表管理的是整个表空间中所有的簇,包括满    簇、半满簇及空闲簇,而段的iNode信息中管理的是属于自己段中的满簇、半满簇及空闲簇。


②:在innodb中,一个簇描述页面要管理16384个页面,簇大小默认为(fsp_extent_size)64个,而簇描述符的大小为40B,所以一个簇描述页面中可以描述的簇的个数为(univ_page_size-页面头长度)/40,其中univ_page_size=16384B表示页面大小;在一个表空间中,簇描述页面的存储是每隔16384个页面就有一个簇描述页面,所以簇描述页面中只需要描述16384个页面即可;


③:所谓的btr,在innodb中,表示的就是B+树的处理,不管以它为开头的是函数,还是文件,都是相关的处理,是Btree的简称;


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇深入理解MySQL innodb日志管理 下一篇Oracle move和shrink释放高水位空..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目