Innodb物理存储结构系列1
本篇先介绍 下Innodb表空间,文件相关的内存数据结构。
1. 数据结构
Innodb的tablespace和文件的关系,是一对多的关系,先来看三个结构体
1. fil_system_struct:
表示Innodb的表空间内存cache,innodb一共包括两类tablespace,即
#define FIL_TABLESPACE 501 /*!< tablespace */
#define FIL_LOG 502 /*!< redo log */
而fil_tablespace有包括了两类,一类是用户的数据,一类是系统表空间。
例如:在MySQL 5.5,设置innodb innodb_file_per_table=ON;
每次create table的时候,就会创建一个新的tablespace,对于与*.ibd数据文件。
2. fil_space_struct
表示innodb的表空间, 包含了space_id,已经属于这个space的文件列表chain。
3. fil_node_struct
表示一个表空间里的数据文件
所以,在innodb中,三种之间的关系就是:
fil_system_t : fil_space_t = 1:n
fil_space_t : fil_node_t = 1:n
2. 初始化和装载
static fil_system_t* fil_system = NULL;
fil_system是一个单实例,系统启动的时候,会装载表空间,例如:
fil_open_log_and_system_tablespace_files:在startup的时候就会打开log表空间和系统表空间的文件,因为受到
ulint max_n_open; /*!< n_open is not allowed to exceed this */
的限制,所以保持log和系统表空间文件一直打开状态。
fil_space_struct:中维持了一个space_id的list,以便进行遍历和查找。以及fil_node_t的chain,即这个space里包含的所有文件。
fil_node_t: 表示一个os上的文件,包括文件的打开状态,文件句柄等信息。
相关的函数:
fil_node_create:创建一个文件节点,加入到space中
fil_space_create:创建一个space,加入到系统中tablespace cache
fil_init:初始化系统的tablespace memory cache
3. innodb 逻辑结构关系
这里表示了innodb的存储层的逻辑对象之间的关系,如果设置了innodb_per_file=on,那么对应每一个tablespace,都有ibd文件与之对应。
除了上面的逻辑关系,真正的物理存储是在文件上,如何在一个ibd文件上,体现出这些逻辑对象呢。
1. ibd file page分布
FSP_HAEDER表示了这个表空间,extent desp表示extent的指针,
innod list,存储了这个表空间的所有的segment。
这样,表空间,段,extent就建立了关系。
2. 一个page的结构
这个page:16k,表示了index的一个page的结构,FIL_header记录属于哪个space_id等信息,page_header记录着这个index相关的信息。
Innodb物理存储结构系列1的更多相关文章
- Innodb物理存储结构系列2 行记录格式
前一篇讨论了Innodb system,表空间,文件的关系及数据结构,这一篇记录下Innodb行记录的格式. 前提: 1. server层和innodb层都有自己对于record的记录格式,需要进行转 ...
- InnoDB表存储结构及keyring加密
ibdata是InnoDB最重要的系统表空间文件,它记录了InnoDB的核心信息,包括事务系统信息.元数据信息,记录InnoDB change buffer的btree,防止数据损坏的double w ...
- InnoDB的表类型,逻辑存储结构,物理存储结构
表类型 对比Oracle支持的各种表类型,InnoDB存储引擎表更像是Oracle中的索引组织表(index organized table).在InnoDB存储引擎表中,每张表都有个主键,如果在创建 ...
- InnoDB 逻辑存储结构
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/80 如果创建表时没有显示的定义主键,mysql会按如下方式创建主 ...
- Innodb页面存储结构-2
上一篇<Innodb页面存储结构-1>介绍了Innodb页面存储的总体结构,本文会介绍页面的详细内容,主要包括页头.页尾和记录的详细格式. 学习数据结构时都说程序等于数据结构+算法,而在i ...
- 学习笔记:oracle学习一:oracle11g体系结构之物理存储结构
目录 1.物理存储结构 1.1 数据文件 1.2 控制文件 1.3 日志文件 1.3.1 重做日志文件 1.3.2 归档日志文件 1.4 服务器参数文件 1.4.1 查看服务器参数 1.4.2 修改服 ...
- (1.3)学习笔记之mysql体系结构(C/S整体架构、内存结构、物理存储结构、逻辑结构)
目录 1.学习笔记之mysql体系结构(C/S架构) 2.mysql整体架构 3.存储引擎 4.sql语句处理--SQL层(内存层) 5.服务器内存结构 6.mysql如何使用磁盘空间 7.mysql ...
- innodb的存储结构
如下所示,innodb的存储结构包含:表空间,段,区,页(块),行 innodb存储结构优化的标准是:一个页里面存放的行数越多,其性能越高 表空间:零散页+段 独立表空间存放的是:数据.索引.插入缓冲 ...
- 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)
开门见山,本篇博客就介绍图相关的东西.图其实就是树结构的升级版.上篇博客我们聊了树的一种,在后边的博客中我们还会介绍其他类型的树,比如红黑树,B树等等,以及这些树结构的应用.本篇博客我们就讲图的存储结 ...
随机推荐
- Linux下面对于VIM编辑器的代码折叠使用与screen
VIM设置代码折叠 1. 折叠方式 可用选项 'foldmethod' 来设定折叠方式:set fdm=*****.有 6 种方法来选定折叠: manual 手工 ...
- 在windows服务器中,将MongoDB服务化。
将mongodb在windows中服务化,就是将其注册成一个服务组件,并可以设置成,手动/自动 启动. 一般的我们都会在command窗口运行如下: d:\mongodb\bin>mongod ...
- Windows api 函数全部列表 (未完成)
网上找了很久,发现没有完整版的,msdn上面有,但是不方便查阅,所以想自己整理一下:由于工程量过于庞大,希望大家共同完成.MSDN:http://msdn.microsoft.com/en-us/li ...
- zhuan:点滴记录——Ubuntu 14.04中gedit打开文件出现中文乱码问题
在中文支持配置还不完整的Ubuntu 14.04中,使用gedit打开带有中文字符的文件有时会出现乱码的情况,这是由于gedit对字符编码匹配不正确导致的,解决方法如下: 在终端中输入如下命令,然后重 ...
- 关于Simple.Data.PostgreSql的ExecuteReader没实现非常坑爹的问题
https://github.com/ChrisMH/Simple.Data.PostgreSql/issues/3 github上有个issues...默认从nuget上下载的Simple.Data ...
- ASP.NET 页面传值得9种方式
1. Get(即使用QueryString显式传递) 方式:在url后面跟参数. 特点:简单.方便. 缺点:字符串长度最长为255个字符:数据泄漏在url中. 适用数据 ...
- Import和SQL*Loader这2个工具的异同
问:请讲述Import和SQL*Loader这2个工具的异同? 解答: 相同点:这两个ORACLE工具都是用来将数据导入数据库的. 区别是: IMPORT工具只能处理由另一个ORACLE工具EXPOR ...
- 十六、mysql 分区之 简单sql优化1
.使用 show session status like '%Com_%'; 可以查看当前连接的各个sql的执行频率 show global status like '%Com_%'; 可以查看从上次 ...
- JS 实现取整(二)
1.直接丢弃小数部分,保留整数部分 a:parseInt(1.5555) b: 0|1.5555 2.向上取整 a: Math.ceil(1.5555) b: (1.5555+0.5).toFixed ...
- 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?
既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...