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

  

 

Innodb物理存储结构系列1,布布扣,bubuko.com

Innodb物理存储结构系列1

上一篇:Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表


下一篇:oracle查询时注意的问题