本篇先介绍 下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的更多相关文章

  1. Innodb物理存储结构系列2 行记录格式

    前一篇讨论了Innodb system,表空间,文件的关系及数据结构,这一篇记录下Innodb行记录的格式. 前提: 1. server层和innodb层都有自己对于record的记录格式,需要进行转 ...

  2. InnoDB表存储结构及keyring加密

    ibdata是InnoDB最重要的系统表空间文件,它记录了InnoDB的核心信息,包括事务系统信息.元数据信息,记录InnoDB change buffer的btree,防止数据损坏的double w ...

  3. InnoDB的表类型,逻辑存储结构,物理存储结构

    表类型 对比Oracle支持的各种表类型,InnoDB存储引擎表更像是Oracle中的索引组织表(index organized table).在InnoDB存储引擎表中,每张表都有个主键,如果在创建 ...

  4. InnoDB 逻辑存储结构

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/80 如果创建表时没有显示的定义主键,mysql会按如下方式创建主 ...

  5. Innodb页面存储结构-2

    上一篇<Innodb页面存储结构-1>介绍了Innodb页面存储的总体结构,本文会介绍页面的详细内容,主要包括页头.页尾和记录的详细格式. 学习数据结构时都说程序等于数据结构+算法,而在i ...

  6. 学习笔记:oracle学习一:oracle11g体系结构之物理存储结构

    目录 1.物理存储结构 1.1 数据文件 1.2 控制文件 1.3 日志文件 1.3.1 重做日志文件 1.3.2 归档日志文件 1.4 服务器参数文件 1.4.1 查看服务器参数 1.4.2 修改服 ...

  7. (1.3)学习笔记之mysql体系结构(C/S整体架构、内存结构、物理存储结构、逻辑结构)

    目录 1.学习笔记之mysql体系结构(C/S架构) 2.mysql整体架构 3.存储引擎 4.sql语句处理--SQL层(内存层) 5.服务器内存结构 6.mysql如何使用磁盘空间 7.mysql ...

  8. innodb的存储结构

    如下所示,innodb的存储结构包含:表空间,段,区,页(块),行 innodb存储结构优化的标准是:一个页里面存放的行数越多,其性能越高 表空间:零散页+段 独立表空间存放的是:数据.索引.插入缓冲 ...

  9. 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)

    开门见山,本篇博客就介绍图相关的东西.图其实就是树结构的升级版.上篇博客我们聊了树的一种,在后边的博客中我们还会介绍其他类型的树,比如红黑树,B树等等,以及这些树结构的应用.本篇博客我们就讲图的存储结 ...

随机推荐

  1. php入门常量

    常量像变量一样,用于临时存储一个值,但是常量在许多方面与变量不同. 常量:1.是在程序执行期间无法改变数据,常量的作用域是全局的.2.常量的命名与与变量相似,只是不带美元符号“$”.一个有效的常量名由 ...

  2. CentOS6.5 MySQL 配置设置总结笔记

    三.登录MySQL 登录MySQL的命令是mysql, mysql 的使用语法如下:  mysql [-u username] [-h host] [-p[password]] [dbname]  u ...

  3. Objective-C中class、Category、Block的介绍

    @class 当定义一个类,必须为编译器提供两组消息,第一组(接口部分.h):构建类的实例的一个基本蓝图.必须指定类名,类的超类,类的实例变量和类型的列表,最后是类的方法的声明.第二组(实现部分.m) ...

  4. 在centos 6.4下安装opencv 2.3.1

    系统环境介绍: centos 6.4 1.安装依赖包 yum install cmake gcc gcc-c++ gtk+-devel gimp-devel gimp-devel-tools gimp ...

  5. C#快速学习笔记(译)续一

    6.虚拟和非虚拟函数 下面是一个非虚拟函数 using System; namespace Test2 { class Plane { public double TopSpeed() {return ...

  6. 解决WPF图片模糊最佳方法(绑定PixelWidth与PixelHeight)

    从事WPF开发一年有余,对于图片显示模糊相信很多人都遇到过.网络上查找能得到一堆解决方法,但都是会带来其他负面影响得不到最佳效果.其实,有些图片会因为垂直分辨率/水平分辨率不同而造成在WPF界面上显示 ...

  7. VC++入门精通视频教程

    1.1.Windows程序运行原理-1 上传日期:2012-03-19 09:18:50  相关摘要:  - 在关闭一个windows窗口时,也关闭另一个吗 - 对纯面向对象的PHP程序有何看法? - ...

  8. 监控SQL Server的job执行情况

    在服务器没有设置发邮件并且不允许发邮件的情况下, 可以通过下列语句来检查SQL Server 的job的执行情况 select top 150 a.run_date,a.run_time, b.nam ...

  9. ios登陆界面

    代码较老,仅供参考 主要涉及的功能点有: 1.密码输入框要隐藏输入字符,以黑点代替,有时候会在边上设置一个按钮,让用户选择是否需要密文输入 2.Login时会检查输入框,若输入不合法,弹窗提示用户 3 ...

  10. CQRS学习——Cqrs补丁,async实验以及实现[其二]

    实验——async什么时候提高吞吐 async是一个语法糖,用来简化异步编程,主要是让异步编程在书写上接近于同步编程.总的来收,在await的时候,相当于附加上了一个.ContinueWith(). ...